Heip, osaisiko kukaan auttaa seuraavassa herjassa:
"Warning: mysql_query(): Your query requires a full tablescan (table taulun_nimi, 7 rows affected.) Use EXPLAIN to optimize your query. in tiedosto.php on line 167
"
En ole tehnyt mitään muutoksia asetuksiin, ja kanta on toiminut moitteettomasti tähän asti. Herja tulee kaikilla sivuilla, joissa on yhteys tietokantaan, joten ongelma tuskin lienee siinä, että hakuni olisivat huonosti optimoituja :(.
Siinä se vika kuitenkin on, full tablescan eli koko taulun läpiluku on nimenomaan merkki huonosti optimoidusta sql:stä. Sillä että saat yhteyden kantaan ei sinänsä kerro mitään sql:n tasossta (connectia lukuunottamatta)
Hmm, silti minusta tuntuu, että tuo herja on hieman "koominen", jos taulussani on esim. 7 riviä, joiden läpikäyminen ei kuitenkaan ole vielä raskasta ja jos joka tapauksessa haluan, että ne kaikki rivit käydään läpi.
Esim. minulla on sovellus, jossa voi antaa hakuehtoja ja jos nämä hakuehdot sitten matsaavat kaikkiin niihin 7 riviin, niin silloihan kuuluukin tehdä full scan ja silloin en haluaisi tuota herjaa.
Saahan ne php:n warningit pois päältäkin, mutta silloin voi mennä jotain tärkeämpiäkin warningeja ohi :(.
Tuntematta tarkemmin mysql:n sielunelämää, tuntuu tosiaan aika koomiselta herjalta, Ehkä 'Use EXPLAIN to optimize your query' ehdotus auttaa optimoijaa. Voihan olla että se ei herjaa kun laitat kannan statistiikan kohdalleen, ilman niitä ei yleensä mikään optimoija voi toimia oikein. Eli systeemitauluista löytyy optimoijalle vinkit taulujen ja indeksien rivimääristä ja kenttien eriarvojen lukumääristä (plus kaikenlaista muuta sälää)
En ole tuollaista virhettä koskaan kohdannut, mutta kuvittelisin että syy on joko:
1)
Haet useasta taulusta etkä määrittele taulujen aliaksia
SELECT A.NIMI, B.NIMI FROM TAULU1 A, TAULU2 B
2)
Haet tietoa kentän perusteella, joka ei ole indeksöity.
3)
Taulusta puuttuu primary key
CREATE TABLE FOOBAR ( ID INTERGER, FOO VARCHAR(16), PRIMARY KEY(ID) ); CREATE INDEX FOO_INDEX ON FOOBAR (FOO);
tai jotenkin noin :)
Aihe on jo aika vanha, joten et voi enää vastata siihen.