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!!!
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.