CREATE TABLE foobar ( id INT AUTO_INCREMENT NOT NULL, spam1 INT, spam2 TEXT, spam3 DOUBLE, PRIMARY KEY (id) )
Olen lukenut netistä ohjeita ja MySQL:n omasta dokumentaatiosta katsonut, mutta en ymmärrä tätä indeksointia täysin. Ensinnäkin, ilmeisesti tämän PRIMARY KEY:n tarkoitus on nopeuttaa tiedon hakua? Nopeutuuko se vain jos haen jotain riviä id:n perusteella, vai nopeutuuko myös jos haen vaikkapa spam2:n perusteella tiettyä riviä tai solua? PRIMARY KEY on ilmeisesti näkymätön, eli luonnin jälkeen siitä ei tarvitse välittää?
Toinen kysymys kuuluu, että jos on pitkä PHP skripti, jonka suorituksen aikana käyttäjä painaa pysäytä sivun lautaus -nappia niin loppuuko skriptin suoritus kuin seinään, vai ilmoittaako selain ainoastaan että ei halua serveriltä enää tietoa - skripti kuitenkin suoritetaan loppuun?
Tumpelo kirjoitti:
CREATE TABLE foobar ( id INT AUTO_INCREMENT NOT NULL, spam1 INT, spam2 TEXT, spam3 DOUBLE, PRIMARY KEY (id) )Olen lukenut netistä ohjeita ja MySQL:n omasta dokumentaatiosta katsonut, mutta en ymmärrä tätä indeksointia täysin. Ensinnäkin, ilmeisesti tämän PRIMARY KEY:n tarkoitus on nopeuttaa tiedon hakua? Nopeutuuko se vain jos haen jotain riviä id:n perusteella, vai nopeutuuko myös jos haen vaikkapa spam2:n perusteella tiettyä riviä tai solua? PRIMARY KEY on ilmeisesti näkymätön, eli luonnin jälkeen siitä ei tarvitse välittää?
Toinen kysymys kuuluu, että jos on pitkä PHP skripti, jonka suorituksen aikana käyttäjä painaa pysäytä sivun lautaus -nappia niin loppuuko skriptin suoritus kuin seinään, vai ilmoittaako selain ainoastaan että ei halua serveriltä enää tietoa - skripti kuitenkin suoritetaan loppuun?
1) Vain Primary keyssä eli idn mukaan. Muihin voit lisätä indeksit jos tarvetta on
2) Loppuu. https://www.php.net/manual/en/function.ignore-user-abort.php
Voinko siis indeksoida myös TEXT sarakkeen, eli PRIMARY KEY (spam2) tässä tapauksessa?
Tumpelo kirjoitti:
Voinko siis indeksoida myös TEXT sarakkeen, eli PRIMARY KEY (spam2) tässä tapauksessa?
Voit, mutta primary keyn tulee olla uniikki, eli kahta samanlaista riviä ei spam2-kentän osalta saa olla. Tekstimuotoinen key syö myös enemmän muistia kuin normaali keinotekoinen kokonaisluku ID-kenttä. Ja jos jossain vaiheessa muutat spam2 kenttää, menevät muiden taulujen relaatiot kyseiseen tauluun pieleen (tosin ehkä jollain fiksulla tietokantamoottorilla voisi jotenkin pistää primary keyn muutokseen rollauksen, jotta kaikki viiteavaimetkin muuttuisivat samalla?).
Tumpelo kirjoitti:
Voinko siis indeksoida myös TEXT sarakkeen, eli PRIMARY KEY (spam2) tässä tapauksessa?
Indeksit kannattaa laitella kaikkiin sarakkeisiin, joita käytetään kyselyiden ehtoina usein. Vielä parempi on niputtaa yleisimmin käytetyn kyselyn hakuehdot samaan indeksiin. Indeksejä voi olla useampiakin, kunhan nimeää ne muuksi kuin primaryksi. Tuolta lisätietoa: http://dev.mysql.com/doc/refman/5.0/en/create-index.html
Teksti sarakkeita en ole juuri käyttänyt, eikä varsinkaan indeksinä käyttämiseen ole ollut tarvetta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.