Jump to content
php.lv forumi

Recommended Posts

Posted (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 by hmnc
Posted (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 by black
Posted

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 :)

×
×
  • Create New...