16. maj 2008 - 10:21Der er
4 kommentarer og 1 løsning
langsom forespørgsel med distinct
Hej alle
Jeg har flg. forespørgsel som er utrolig langsom: SET timestamp=1210849319; select DISTINCT(advertisers.id), advertisers.* from advertisers, advertiser_products, products inner join advertiser_areas on advertisers.id = advertiser_areas.advertiser_id
Hvis jeg fjerner DISTINCT(advertisers.id), fra forespørgslen, går det perfekt, men så får jeg jo 6883240 resultater i stedet for 270!!!
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
så langt er jeg faktisk ikke kommet i koden (jeg har fået den udleveret her til morgen...) Men jeg tror umiddelbart at jeg har fundet fejlen. Nu vil jeg i hvert fald prøve min teori af som er: Hvorfor lave SELECT FROM tabeller, som der ikke hentes data fra??? Jeg fjernede således "advertiser_products, products", hvorefter jeg fik min søgetid næsten ned på nul...
den gik så ikke... den fulde SQL ser således ud: select DISTINCT(advertisers.id), advertisers.* from advertisers, advertiser_products, products inner join advertiser_areas on advertisers.id = advertiser_areas.advertiser_id inner join areas on advertiser_areas.area_id = areas.id inner join advertiser_categories on advertisers.id = advertiser_categories.advertiser_id inner join categories on categories.id = advertiser_categories.categorie_id WHERE advertisers.status=1 and ((advertisers.expire > UNIX_TIMESTAMP() and advertisers.closed > UNIX_TIMESTAMP()) or (advertisers.expire = 0 and advertisers.closed =0)) AND categories.id = '193' AND advertiser_products.advertiser_id = advertisers.id AND advertiser_products.start < UNIX_TIMESTAMP() AND products.fnumber = advertiser_products.product_id AND products.visible= '1' AND (advertiser_products.terminate > UNIX_TIMESTAMP() OR advertiser_products.end=0) ORDER BY RAND()
løsningen for mig var at lave indexes på alle refererede fremmednøgler! Den bedste løsning var måske nok, at lave en bedre opbygget SELECT-statement, men der foreligger ikke dokumentation på databasen, hvorfor jeg har opgivet denne løsning i første omgang!
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.