hmnc Posted January 4, 2007 Report Posted January 4, 2007 (edited) Nesen čakarējos ar vienu db kur bija subselects aptuveni šāds: SELECT * FROM tableA WHERE tid IN ( SELECT id FROM tableB WHERE cid='var' ) itkā viss normāli un smuki notiek. bet kad paskatījos performanci tad viss tik rožaini nelikās. itkā jau bremzēt nevajadzētu, jo mysql 5.0 pats ir diezgan gudrs, bet tomēr ātrums neapmierināja un es paeksperimentēju.. sanāca aptuveni šādi: $vajadzigie_id = ...query("SELECT id FROM tableB WHERE cid='var'"); $ieraksti = ...query("SELECT * FROM tableA WHERE tid IN ( ".implode(', ',$vajadzigie_id)." ) "); neticami, bet strādā aptuveni 5-9 reizes ātrāk nekā ar subselectu. iemeslus precīzus nepateikšu, jo manuprāt mysqlam jābūt pašam pietiekami gudram, lai izvilktu ar subselectu visu maksimāli efektīvi, bet izskatās, ka tā tomēr nav. bet nu varbūt kādam noder šī info. Edited January 4, 2007 by hmnc
Roze Posted January 4, 2007 Report Posted January 4, 2007 Parādi ko tev atdod: EXPLAIN SELECT * FROM tableA WHERE tid IN ( SELECT id FROM tableB WHERE cid='var' )
black Posted January 4, 2007 Report Posted January 4, 2007 (edited) Šķiet, ka konkrētajā gadījumā varēja iztikt arī ar JOINu? Varbūt vari pamēģināt salīdzināt subquery un join'a performanci? Edited January 4, 2007 by black
hmnc Posted January 4, 2007 Author Report Posted January 4, 2007 nu man tur tusējās 2 joini un viens ir ar tā subselecta tabulu. smieklīgākais ir tas, ka atlasot pēc kritērija joinotajai tabulai tas pasākums iebremzēja vēl vairāk. indexi salikti uz visiem join un atlases parametriem + id. roze - nu izskatās čābīgi cik uzmetu aci, kaut kad vēlāk uzmetīšu kā izskatās :)
Recommended Posts