Kuopassa.net

Lisää kirjoituksia netistä.

Etsi blogista

Kuinka parantaa MySQL-kantaan menevää kyselyä (aivopähkinä)

Kirjoitettiin
Päivitettiin 23. syyskuuta 2017 kello 04.23

Löysin Stackoverflow’sta vuosien ikäisen MySQL-tietokantaan tehtävän kyselyn. Sen julkaissut henkilö vihjasi haluavansa nopeuttaa sitä kyselyä niin, että noin 4000 riviä sisältävästä tietokannasta datan rouskuttaminen sujuisi nopeammin. Hän kirjoitti ensimmäisen kyselykerran vievän 5–10 sekuntia, ja sitä seuraavien sujuvan paljon nopeammin. Haluan katsoa miltä se kysely näyttäisi jos minä kirjoittaisin sen, vaikka nyt aamuneljältä.

Alkuperäinen kysely

SELECT PRODUCT_2_CATEGORY.PRODUCT_ID FROM PRODUCT_2_CATEGORY, PRODUCT, MERCHANT WHERE PRODUCT_2_CATEGORY.PRODUCT_ID = PRODUCT.ID AND PRODUCT.PRO_STATUS='active' AND PRODUCT.MERCHANT_ID = MERCHANT.ID AND MERCHANT.M_STATUS='active' AND ( CAT_ID='1' OR CAT_ID='1004' OR CAT_ID='1005' OR CAT_ID='1006' OR CAT_ID='1007' OR CAT_ID='1008' OR CAT_ID='1002' OR CAT_ID='1003' OR CAT_ID='45' OR CAT_ID='46' OR CAT_ID='74' OR CAT_ID='75' OR CAT_ID='76' OR CAT_ID='49' OR CAT_ID='50' OR CAT_ID='77' OR CAT_ID='78' OR CAT_ID='79' OR CAT_ID='80' OR CAT_ID='81' OR CAT_ID='82' OR CAT_ID='83' OR CAT_ID='84' OR CAT_ID='47' OR CAT_ID='89' OR CAT_ID='51' OR CAT_ID='52' OR CAT_ID='88' OR CAT_ID='87' OR CAT_ID='86' OR CAT_ID='85' OR CAT_ID='48' OR CAT_ID='53' OR CAT_ID='54' OR CAT_ID='90' OR CAT_ID='200' OR CAT_ID='91' OR CAT_ID='92' OR CAT_ID='93' OR CAT_ID='94' OR CAT_ID='11' OR CAT_ID='95' OR CAT_ID='98' OR CAT_ID='99' OR CAT_ID='100' OR CAT_ID='101' OR CAT_ID='96' OR CAT_ID='102' OR CAT_ID='103' OR CAT_ID='104' OR CAT_ID='105' OR CAT_ID='106' OR CAT_ID='97' OR CAT_ID='107' OR CAT_ID='108' OR CAT_ID='109' OR CAT_ID='110' OR CAT_ID='114' OR CAT_ID='119' OR CAT_ID='120' OR CAT_ID='121' OR CAT_ID='115' OR CAT_ID='122' OR CAT_ID='123' OR CAT_ID='124' OR CAT_ID='125' OR CAT_ID='116' OR CAT_ID='127' OR CAT_ID='128' OR CAT_ID='129' OR CAT_ID='117' OR CAT_ID='130' OR CAT_ID='131' OR CAT_ID='118' OR CAT_ID='111' OR CAT_ID='132' OR CAT_ID='136' OR CAT_ID='137' OR CAT_ID='138' OR CAT_ID='139' OR CAT_ID='140' OR CAT_ID='133' OR CAT_ID='141' OR CAT_ID='142' OR CAT_ID='143' OR CAT_ID='144' OR CAT_ID='145' OR CAT_ID='146' OR CAT_ID='134' OR CAT_ID='147' OR CAT_ID='148' OR CAT_ID='149' OR CAT_ID='150' OR CAT_ID='151' OR CAT_ID='135' OR CAT_ID='152' OR CAT_ID='153' OR CAT_ID='154' OR CAT_ID='155' OR CAT_ID='156' OR CAT_ID='64' OR CAT_ID='158' OR CAT_ID='70' OR CAT_ID='164' OR CAT_ID='71' OR CAT_ID='165' OR CAT_ID='159' OR CAT_ID='166' OR CAT_ID='167' OR CAT_ID='168' OR CAT_ID='169' OR CAT_ID='160' OR CAT_ID='73' OR CAT_ID='170' OR CAT_ID='172' OR CAT_ID='173' OR CAT_ID='174' OR CAT_ID='161' OR CAT_ID='175' OR CAT_ID='176' OR CAT_ID='177' OR CAT_ID='178' OR CAT_ID='162' OR CAT_ID='179' OR CAT_ID='180' OR CAT_ID='181' OR CAT_ID='182' OR CAT_ID='183' OR CAT_ID='163' OR CAT_ID='184' OR CAT_ID='192' OR CAT_ID='191' OR CAT_ID='190' OR CAT_ID='189' OR CAT_ID='188' OR CAT_ID='187' OR CAT_ID='186' OR CAT_ID='185' OR CAT_ID='193' OR CAT_ID='112' OR CAT_ID='113' OR CAT_ID='65' OR CAT_ID='66' OR CAT_ID='67' OR CAT_ID='68' OR CAT_ID='69') AND MATCH(PRODUCT.TITLE) AGAINST('shirt' IN BOOLEAN MODE) ORDER BY PRODUCT.TITLE ASC LIMIT 0, 12


Poistin lainausmerkit tuotekategorioiden numeroista ja laitoin ne IN-komentoon. No joo, ehkä tuossa on vielä muutakin parannettavaa. Jos keksit ideoita, kirjoita mailia osoitteeseen pete@kuopassa.com ja laitan ne jutun jatkoksi.

Parannettu kysely

SELECT
PRODUCT_2_CATEGORY.PRODUCT ID
FROM
`PRODUCT_2_CATEGORY`,
`PRODUCT`,
`MERCHANT`
WHERE
PRODUCT_2_CATEGORY.PRODUCT_ID = PRODUCT.ID
AND
PRODUCT.PRO_STATUS = 'active'
AND
PRODUCT.MERCHANT_ID = MERCHANT.ID
AND
MERCHANT.M_STATUS = 'active'
AND
PRODUCT.CAT_ID IN
(1,100,1002,1003,1004,1005,1006,1007,1008,101,102,103,104,105,106,107,108,109,11,110,111,112,
113,114,115,116,117,118,119,120,121,122,123,124,125,
127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,
153,154,155,156,158,159,160,161,162,
163,164,165,166,167,168,169,170,172,173,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,
191,192,193,200,45,46,47,48,49,50,51,
52,53,54,64,65,66,67,68,69,70,71,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99)
AND
MATCH(PRODUCT.TITLE) AGAINST('shirt' IN BOOLEAN MODE)
ORDER BY
PRODUCT.TITLE ASC
LIMIT 0, 12

Saatat olla kiinnostunut näistä:
Tietoa kirjoittajasta

"Kuinka parantaa MySQL-kantaan menevää kyselyä (aivopähkinä)" on saanut pisteet 7 yhteensä 10 pisteestä. Julkaisu on pisteytetty 1 kerran. Tämä juttu mukaan laskettuna blogissa on julkaistu yhteensä 1205 kirjoitusta. Tämän sivun niin sanottu kestolinkki on tässä siltä varalta jos haluat linkittää siihen esimerkiksi blogista tai joltain foorumilta. Tagi tai tagit: .

Tsekkaa myös minkälaisia valokuvia teen: www.pjti.fi