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?
Profiloinnilla varmaan.
http://dev.mysql.com/tech-resources/articles/using-new-query-profiler.html
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ää.
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.
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-
Aihe on jo aika vanha, joten et voi enää vastata siihen.