hmnc Posted January 4, 2007 Report Share 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 Link to comment Share on other sites More sharing options...
Roze Posted January 4, 2007 Report Share Posted January 4, 2007 Parādi ko tev atdod: EXPLAIN SELECT * FROM tableA WHERE tid IN ( SELECT id FROM tableB WHERE cid='var' ) Link to comment Share on other sites More sharing options...
black Posted January 4, 2007 Report Share 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 Link to comment Share on other sites More sharing options...
hmnc Posted January 4, 2007 Author Report Share 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 :) Link to comment Share on other sites More sharing options...
Recommended Posts