PRIMARY KEY, UNIQUE, INDEX ir FULLTEXT visi yra Indeksai.
Indeksas yra specialiu formatu papildomai išsaugomi duomenys, kad tarp jų būtų galima greitai surasti norimą elementą. Realiai tai yra B-TREE medis saugomas atskirai nuo visų duomenų, ir MySQL serveris gavęs užklausą surasti tam tikrą įrašą pagal ID (ineksą) pirmiausia jį suranda toje specialioje struktūroje (medyje), nes joje paieška atliekama N kartų greičiau negu paprastai skanuojant duomenis. Suradus medyje elementą telieka pagal adresą iš duomenų failo nusiskaityti reikiamus duomenis.
Kaip ir minėjau visi minėti stulpelių tipai yra Indeksai. Jie šiek tiek skirasi:
INDEX yra standartinis indeksas, jo tipo stulpeliuose galima saugoti visokius duomenis (įskaitant ir NULL ir pasikartojančius;
UNIQUE yra papildytas tuo, kad elementai negali kartotis, t.y. uždėjus tokio tipo indeksą ant stulpelio galima apsisaugoti nuo duomenų korupcijos; reikia pridurti tik tai, kas MySQL'e NULL != NULL (NULL nelygus pačiam saug);
PRIMARY KEY, yra dar daugiau praplėstas indeksas, kuris neleižia laikyti NULL reikšmių;
FULLTEXT, ar specialiai padobulintas indeksas palengvinantis paiešką tarp tekstinių duomenų;
Gal ką ir praleidau, bet esmė tokia. Tiksliau viską galima sužinoti dokumentacijose, pvz.: Kaip MySQL'as naudoja ineksus - http://dev.mysql.com/doc/refman/4.1/en/ … dexes.html