Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Järjettömän hitaat SQL-kyselyt

Damiqib [29.12.2007 22:19:30]

#

SQL query: DELETE FROM taulu WHERE added = CURRENT_DATE( )
Deleted rows: 55552 (Query took 118.2309 sec)

added on indeksoitukin.

Myös insertit kestää ihan törkeän kauan. Ko. taulussa on reilu miljoona riviä.

Miten tuota ongelmaa voisi tutkia?

Niko [29.12.2007 22:50:37]

#

Profiloinnilla varmaan.

http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html

ajv [29.12.2007 23:06:15]

#

Sen indeksoinnin takia nuo toiminnot kestääkin. Indeksit kun täytyy laskea aina uudestaan, kun taulun sisältö muuttuu. Ja todennäköisesti tuon date-kentän käyttäminen indeksinä tuonkin kokoisessa taulussa tekee ko. indeksistä aika ison => hitaan päivittää.

ville-v [30.12.2007 10:23:56]

#

Käyttämällä datatiedostoja tietokannan sijaan saisit nopeutta. Siitä vaan miettimään kumpi on tärkeämpää, nopeus vai SQL:n jännät ominaisuudet.

Wizard [06.01.2008 18:22:19]

#

Kaksi perusongelmaa joista molemmat mainittu:

1) indeksointi ja indeksien uudelleen rakentaminen, kokeile vaihtoehtoista tapaa eli tiputa indeksi, poista ja rakenna indeksit uudelleen. Monesti nopeampi ja vaihtoehtoinen tapa, ei sovi kyllä kaikkiin tapauksiin
2) CURRENT_DATE funktion käyttö SQL-kyselyssä, syötä arvo mieluummin suoraan stringinä

Jos tuohon 'added' kenttää ei osu kovin montaa SELECT kyselyä päivässä, niin sitä ei kannattane indeksoida ollenkaan jos siihen tehdään myös massapoistoja mainitulla tyylillä. Indeksin tarpeellisuutta on aina syytä miettiä kaikissa eri tilanteissa.

Insert lauseiden osalta kannattaa syöttää kaikki arvot yhdellä lauseella eikä yksitellen. Tosin esim. PHP:n last_insert_id functio lakkaa toimimasta MySQL:n kanssa jne. Kun syöttää kaikki arvot yhdellä lauseella, indeksit myös rakennetaan uudelleen vain kerran.

-W-

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta