Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Primary key ja selaimen kyky pysäyttää skripti

Tumpelo [31.10.2007 17:38:55]

#

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?

Niko [31.10.2007 18:25:18]

#

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

Tumpelo [01.11.2007 11:27:07]

#

Voinko siis indeksoida myös TEXT sarakkeen, eli PRIMARY KEY (spam2) tässä tapauksessa?

kayttaja-2791 [01.11.2007 11:47:55]

#

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?).

LaNu [01.11.2007 21:12:43]

#

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.

Vastaus

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

Tietoa sivustosta