Jump to content
php.lv forumi

Padoms par subselectiem iekš mysql


hmnc

Recommended Posts

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
Link to comment
Share on other sites

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

×
×
  • Create New...