Olen saanut kuulla, että nettisivumme toimivat tietyissä tilanteissa erittäin hitaasti siistä syystä, että joihinkin tietokantatauluihin ei ole tehty indeksejä. Minä en tietokannnan rakenteista ja indekseistä ymmärrä paljoakaan, mutta katsastin sivun http://www.ohjelmointiputka.net/opas.php?tunnus=mysqlphp10#indeksit ja jos tuota ihan maallikkona lukee (siis tuo osuus indexeistä), niin tuohan vaikuttaa varsin yksinkertaiselta.
Onko siis totta, että indexin luominen vaatii ainoastaan tuollaisen CREATE INDEX sql-lauseen ajamisen? Eikö todellakaan mihinkään muualle tarvi tehdä mitään kun kyseiseen taullun luoda em. tavalla indexi? Tuo tuntuu jotenkin liian yksinkertaiselta, mutta kuten sanoin, en ymmärrä tästä asiasta juurikaan mitään.
No JOS se indexin luominen olisi noin yksinkertaista, niin mitä tuossa esimerkkisivun esimerkkilauseessa
CREATE INDEX omaindeksi ON tuotteet (hinta);
tulee tuon "omaindeksi" sanan tilalle. Saako sen itse päättää vapaasti?
Indexin luominen (mysql)
9
1256
Vastaukset
- juhakorkeapudas
Ei se muuta vaadi. Jos kanta ei ole sinun tekemäsi, mistä tiedät, että indeksiä ei ole? Palveluntarjoajalla on varmasti työkalu kannan selaamisen (phpmyadmin). Katsopa sen kautta onko indeksi olemassa ja ellei ole luo se samalla työkalulla tai sitten ihan mysql komentoriviltä kuten esimerkissä.
Indeksin nimen (omaindeksi) voi valita itse mutta taulu (tuotteet) ja kenttä (hinta) pitää olla olemassa.- jarkko-the-chocoholic
"Jos kanta ei ole sinun tekemäsi, mistä tiedät, että indeksiä ei ole?"
Webhotellin ylläpidosta sanottiin niin:
"Palvelunne kuormittaa tällä hetkellä hyvin vahvasti palvelinta ja syynä on indeksien puuttuminen. Esimerkiksi alla olevalle haulle ei ole sopivia indeksejä suklaa_product_eval ja suklaa_public_eval tauluissa. Koska näistä kahdesta taulusta puuttuvat sopivat indeksit mysql käsittelee joka kerta 8022*5651 riviä (noin 45 miljoonaa riviä).
SELECT tuote.id, producer_id, product_name, product_info, image_name,
big_image_name, producer.name AS producer, country.name AS country, AVG(
eval.rank ) AS eval_avg, COUNT( DISTINCT eval.id ) AS eval_count, AVG(
publ.rank ) AS publ_avg, COUNT( DISTINCT publ.id ) AS publ_count
FROM suklaa_product AS tuote
INNER JOIN suklaa_producer AS producer ON producer.id = tuote.producer_id
INNER JOIN suklaa_product_eval AS eval ON eval.product_id = tuote.id
INNER JOIN suklaa_country AS country ON country.id = tuote.country_id
LEFT JOIN suklaa_public_eval AS publ ON publ.product_id = tuote.id
WHERE producer_id =18
AND show_in_web =1
GROUP BY tuote.id, product_name, image_name, product_info
ORDER BY product_name ASC
"
Tietokannassa on tietenkin muitakin tauluja kuin nuo 2 mainittua, yhteensä 15. Otin mainituista tauluista kuvankaappaukset phpmyadminista ja minusta näyttäisi että jotain indeksejä on, mutta en mää tuosta oikeen tajua...
http://www.suklaayhdistys.com/jutut/suklaa_product_eval.jpg
http://www.suklaayhdistys.com/jutut/suklaa_public_eval.jpg - juhakorkeapudas
jarkko-the-chocoholic kirjoitti:
"Jos kanta ei ole sinun tekemäsi, mistä tiedät, että indeksiä ei ole?"
Webhotellin ylläpidosta sanottiin niin:
"Palvelunne kuormittaa tällä hetkellä hyvin vahvasti palvelinta ja syynä on indeksien puuttuminen. Esimerkiksi alla olevalle haulle ei ole sopivia indeksejä suklaa_product_eval ja suklaa_public_eval tauluissa. Koska näistä kahdesta taulusta puuttuvat sopivat indeksit mysql käsittelee joka kerta 8022*5651 riviä (noin 45 miljoonaa riviä).
SELECT tuote.id, producer_id, product_name, product_info, image_name,
big_image_name, producer.name AS producer, country.name AS country, AVG(
eval.rank ) AS eval_avg, COUNT( DISTINCT eval.id ) AS eval_count, AVG(
publ.rank ) AS publ_avg, COUNT( DISTINCT publ.id ) AS publ_count
FROM suklaa_product AS tuote
INNER JOIN suklaa_producer AS producer ON producer.id = tuote.producer_id
INNER JOIN suklaa_product_eval AS eval ON eval.product_id = tuote.id
INNER JOIN suklaa_country AS country ON country.id = tuote.country_id
LEFT JOIN suklaa_public_eval AS publ ON publ.product_id = tuote.id
WHERE producer_id =18
AND show_in_web =1
GROUP BY tuote.id, product_name, image_name, product_info
ORDER BY product_name ASC
"
Tietokannassa on tietenkin muitakin tauluja kuin nuo 2 mainittua, yhteensä 15. Otin mainituista tauluista kuvankaappaukset phpmyadminista ja minusta näyttäisi että jotain indeksejä on, mutta en mää tuosta oikeen tajua...
http://www.suklaayhdistys.com/jutut/suklaa_product_eval.jpg
http://www.suklaayhdistys.com/jutut/suklaa_public_eval.jpgTuo oletusindeksi näyttää olevan mutta sen lisäksi voit määritellä uuden indeksin kohdassa Indeksit: Luo 1:n sarakkeen indeksi -> Siirry. Tämän jälkeen annat indeksille nimen ja määrittelet sarakkeen josta indeksi muodostetaan. Kenttiä voi myös lisätä (max 16) samaan indeksiin jos kenttien sisältö on sen tyyppistä, että niitä käytetään yhdessä (http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html).
- jarkko-the-chocoholic
juhakorkeapudas kirjoitti:
Tuo oletusindeksi näyttää olevan mutta sen lisäksi voit määritellä uuden indeksin kohdassa Indeksit: Luo 1:n sarakkeen indeksi -> Siirry. Tämän jälkeen annat indeksille nimen ja määrittelet sarakkeen josta indeksi muodostetaan. Kenttiä voi myös lisätä (max 16) samaan indeksiin jos kenttien sisältö on sen tyyppistä, että niitä käytetään yhdessä (http://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html).
Ei riitä ymmärrys...
"määrittelet sarakkeen josta indeksi muodostetaan"
Mistä tiedän mikä sarake olisi oikea valinta? Kokeilin valita sarakkeen "product_id", joka ilmeisimmin on kunkin tuotteen erillinen id, mutta siitä seurasi vaan herjaa mahdollisesti johtuen siitä, että sama "product_id" esiintyy taulussa suklaa_product_eval monta kertaa, sillä samasta tuotteesta voi olla monta arviotakin.
Tietenkin tuossa olisi käytettävissä myös sarake "id", joka esiintyy monessakin taulussa, mutta numero 1 siinä sarakkeessa ei taida aina tarkoittaa samaa asiaa eri taulujen välillä.
Aika arka olo mennä käpistelemään noita kun ei ymmärrä. Onneksi sentään on testikanta omalla servolla jossa voi kokeilla, ei ole niin vaarallista jos menee kurttuun :-) Ei sua tietenkään sais esimerkiksi suklaalla houkuteltua laittamaan indeksit kuntoon? - juhakorkeapudas
jarkko-the-chocoholic kirjoitti:
Ei riitä ymmärrys...
"määrittelet sarakkeen josta indeksi muodostetaan"
Mistä tiedän mikä sarake olisi oikea valinta? Kokeilin valita sarakkeen "product_id", joka ilmeisimmin on kunkin tuotteen erillinen id, mutta siitä seurasi vaan herjaa mahdollisesti johtuen siitä, että sama "product_id" esiintyy taulussa suklaa_product_eval monta kertaa, sillä samasta tuotteesta voi olla monta arviotakin.
Tietenkin tuossa olisi käytettävissä myös sarake "id", joka esiintyy monessakin taulussa, mutta numero 1 siinä sarakkeessa ei taida aina tarkoittaa samaa asiaa eri taulujen välillä.
Aika arka olo mennä käpistelemään noita kun ei ymmärrä. Onneksi sentään on testikanta omalla servolla jossa voi kokeilla, ei ole niin vaarallista jos menee kurttuun :-) Ei sua tietenkään sais esimerkiksi suklaalla houkuteltua laittamaan indeksit kuntoon?Laitapa ensin taulun suklaa_product indeksit kuntoon. Tee indeksi näille sarakkeille: "tuote.id, producer_id, product_name, product_info, image_name, producer.name, country.name". Samaan syssyyn katso myös muut taulut ja tee niille myös indeksit samaan tyyliin.
Sen jälkeen testaa vaikuttiko indeksin luonti hakuun. Veikkaisin, että ongelman ydin on juuri tuossa suklaa_product taulussa ellei siellä ole indeksejä. En ole törmännyt virheeseen indeksiä luodessa mutta olen tehnyt niitä yleensä vain sarakkeisiin joiden arvot ovat yksilöllisiä. - juhakorkeapudas
jarkko-the-chocoholic kirjoitti:
Ei riitä ymmärrys...
"määrittelet sarakkeen josta indeksi muodostetaan"
Mistä tiedän mikä sarake olisi oikea valinta? Kokeilin valita sarakkeen "product_id", joka ilmeisimmin on kunkin tuotteen erillinen id, mutta siitä seurasi vaan herjaa mahdollisesti johtuen siitä, että sama "product_id" esiintyy taulussa suklaa_product_eval monta kertaa, sillä samasta tuotteesta voi olla monta arviotakin.
Tietenkin tuossa olisi käytettävissä myös sarake "id", joka esiintyy monessakin taulussa, mutta numero 1 siinä sarakkeessa ei taida aina tarkoittaa samaa asiaa eri taulujen välillä.
Aika arka olo mennä käpistelemään noita kun ei ymmärrä. Onneksi sentään on testikanta omalla servolla jossa voi kokeilla, ei ole niin vaarallista jos menee kurttuun :-) Ei sua tietenkään sais esimerkiksi suklaalla houkuteltua laittamaan indeksit kuntoon?"Samaan syssyyn katso myös muut taulut ja tee niille myös indeksit samaan tyyliin."
Siis siinä tapauksessa, jos muitakin tauluja käytetään nettihauissa. - jarkko-the-chocoholic
juhakorkeapudas kirjoitti:
Laitapa ensin taulun suklaa_product indeksit kuntoon. Tee indeksi näille sarakkeille: "tuote.id, producer_id, product_name, product_info, image_name, producer.name, country.name". Samaan syssyyn katso myös muut taulut ja tee niille myös indeksit samaan tyyliin.
Sen jälkeen testaa vaikuttiko indeksin luonti hakuun. Veikkaisin, että ongelman ydin on juuri tuossa suklaa_product taulussa ellei siellä ole indeksejä. En ole törmännyt virheeseen indeksiä luodessa mutta olen tehnyt niitä yleensä vain sarakkeisiin joiden arvot ovat yksilöllisiä.Arvasinhan minä, että ei tämä ihan näin yksinkertaista ole ;-\
Tällaisia sarakkeita ei ole olemassakaan (missään taulussa):
tuote.id
producer.name
country.name
Lisäksi (tiedoksi, jos vaikuttaa johonkin):
- producer_id -sarakkeessa on monissakin sama numero, eli valmistajan ID, joka on määritelty suklaa_producer -taulun id-sarakkeessa (eli odotettavissa kenties aiemmin saamani herja)
- product_info -sarake on tyhjä (turha sarake periaatteessa)
- image_name -sarake sisältää vain http://www... -polun kuvatiedostoon
Ja varmistuksena vielä:
Jos haluan tehdä indeksin sarakkeelle product_name niin painan sitä "Luo 1:n sarakkeen indeksi" ja Siirry. Sitten annan indeksille keksimäni nimen ja valitsen sarakkeeksi product_name. Näinkö? Pitääkö indeksin olla primary, index, unique (oletus) vai fulltext? Tarvitseeko koko-kenttään merkitä mitään? - juhakorkeapudas
jarkko-the-chocoholic kirjoitti:
Arvasinhan minä, että ei tämä ihan näin yksinkertaista ole ;-\
Tällaisia sarakkeita ei ole olemassakaan (missään taulussa):
tuote.id
producer.name
country.name
Lisäksi (tiedoksi, jos vaikuttaa johonkin):
- producer_id -sarakkeessa on monissakin sama numero, eli valmistajan ID, joka on määritelty suklaa_producer -taulun id-sarakkeessa (eli odotettavissa kenties aiemmin saamani herja)
- product_info -sarake on tyhjä (turha sarake periaatteessa)
- image_name -sarake sisältää vain http://www... -polun kuvatiedostoon
Ja varmistuksena vielä:
Jos haluan tehdä indeksin sarakkeelle product_name niin painan sitä "Luo 1:n sarakkeen indeksi" ja Siirry. Sitten annan indeksille keksimäni nimen ja valitsen sarakkeeksi product_name. Näinkö? Pitääkö indeksin olla primary, index, unique (oletus) vai fulltext? Tarvitseeko koko-kenttään merkitä mitään?Sori, tarkoitin, että käy läpi muut taulut joita käytetään antamissasi kyselyissä ja määrittele indeksit niiden sarakkeisiin. Hidastumista tulee kun tuossa yhdistämiskyselyssä käytetään useampaa taulua ja jos niiden indeksointi ei ole kunnossa haku kestää kauan.
"Ja varmistuksena vielä:"
Kyllä, juuri niin. Indeksin tyyppi tulee olla index paitsi niissä kentissä joissa on esim. tuotteen kuvaus tms. muu pitkä teksti ja haluat, että ko. sarakkeen sisältö on indeksoitu kokonaan (tämä kasvattaa myös indeksin kokoa).
Laita mahdolliset virheilmoitukset esille. - näillä kokeilemaan
jarkko-the-chocoholic kirjoitti:
"Jos kanta ei ole sinun tekemäsi, mistä tiedät, että indeksiä ei ole?"
Webhotellin ylläpidosta sanottiin niin:
"Palvelunne kuormittaa tällä hetkellä hyvin vahvasti palvelinta ja syynä on indeksien puuttuminen. Esimerkiksi alla olevalle haulle ei ole sopivia indeksejä suklaa_product_eval ja suklaa_public_eval tauluissa. Koska näistä kahdesta taulusta puuttuvat sopivat indeksit mysql käsittelee joka kerta 8022*5651 riviä (noin 45 miljoonaa riviä).
SELECT tuote.id, producer_id, product_name, product_info, image_name,
big_image_name, producer.name AS producer, country.name AS country, AVG(
eval.rank ) AS eval_avg, COUNT( DISTINCT eval.id ) AS eval_count, AVG(
publ.rank ) AS publ_avg, COUNT( DISTINCT publ.id ) AS publ_count
FROM suklaa_product AS tuote
INNER JOIN suklaa_producer AS producer ON producer.id = tuote.producer_id
INNER JOIN suklaa_product_eval AS eval ON eval.product_id = tuote.id
INNER JOIN suklaa_country AS country ON country.id = tuote.country_id
LEFT JOIN suklaa_public_eval AS publ ON publ.product_id = tuote.id
WHERE producer_id =18
AND show_in_web =1
GROUP BY tuote.id, product_name, image_name, product_info
ORDER BY product_name ASC
"
Tietokannassa on tietenkin muitakin tauluja kuin nuo 2 mainittua, yhteensä 15. Otin mainituista tauluista kuvankaappaukset phpmyadminista ja minusta näyttäisi että jotain indeksejä on, mutta en mää tuosta oikeen tajua...
http://www.suklaayhdistys.com/jutut/suklaa_product_eval.jpg
http://www.suklaayhdistys.com/jutut/suklaa_public_eval.jpgCREATE INDEX suklaa_product_producer ON sulkaa_product (producer_id)
CREATE INDEX suklaa_product_sorter ON suklaa_product (Id, product_name, image_name, product_info)
CREATE INDEX suklaa_product_name ON sulkaa_product (product_name)
Tietysti indeksin voi sitten nimetä toisinkin tuo nyt on vaan mun tapa.
Kyselystä arvelisin että suklaa_producer ja suklee_country käyttäisi varmaankin primary avainta joten niihin ei tuon kyselyn takia tarvinne indexsejä luoda.
Ja muistaa jättää uniqu määreet pois niin eipä haittaa tuplat indeksissä.
En nyt muista miten MySql mutta monissa kannoissa on myös mahdollista kysyä mitä indeksejä kanta kyselyssä käyttää.
solidissa kirjoitetaan kyselun eteen "explain plan for" ja sitten kysely mutta MySql:ssä ei varmaankaan ole samalla nimellä.
Ja tuo on muutenkin ihan hatusta revästy mutta koita, jos haluat ja jos koitat niin toivottavasti auttaa.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornosta
https://www.kymensanomat.fi/paikalliset/8081054 Kotkalainen Demari Riku Pirinen vangittu Saksassa lapsipornon hallussapi852287Olen tosi outo....
Päättelen palstajuttujen perusteella mitä mieltä minun kaipauksen kohde minusta on. Joskus kuvittelen tänne selkeitä tap182257Vanhalle ukon rähjälle
Satutit mua niin paljon kun erottiin. Oletko todella niin itsekäs että kuvittelet että huolisin sut kaiken tapahtuneen181700- 1041458
Maisa on SALAKUVATTU huumepoliisinsa kanssa!
https://www.seiska.fi/vain-seiskassa/ensimmainen-yhteiskuva-maisa-torpan-ja-poliisikullan-lahiorakkaus-roihuaa/1525663921416Hommaatko kinkkua jouluksi?
Itse tein pakastimeen n. 3Kg:n murekkeen sienillä ja juustokuorrutuksella. Voihan se olla, että jonkun pienen, valmiin k1631248Aatteleppa ite!
Jos ei oltaisikaan nyt NATOssa, olisimme puolueettomana sivustakatsojia ja elelisimme tyytyväisenä rauhassa maassamme.2571042- 63943
- 78909
Omalääkäri hallituksen utopia?
Suurissa kaupungeissa ja etelässä moinen onnistunee. Suuressa osassa Suomea on taas paljon keikkalääkäreitä. Mitenkäs ha174893