UNIQUE a PRIMARY KEY jsou omezení , nikoli indexy. Ačkoli většina databází implementuje tato omezení pomocí indexu. Dodatečná režie omezení kromě indexu je nevýznamná, zvláště když započítáte náklady na sledování a opravu neúmyslných duplicit, když (ne pokud) nastanou.
Indexy jsou obvykle účinnější, pokud máte vysokou selektivitu . Toto je poměr počtu různých hodnot k celkovému počtu řádků.
Například ve sloupci pro číslo sociálního pojištění můžete mít 1 milion řádků s 1 milionem různých hodnot. Selektivita je tedy 1 000 000/1 000 000 =1,0 (ačkoli existují vzácné historické výjimky, čísla SSN mají být jedinečná).
Ale další sloupec v této tabulce, „pohlaví“, může mít pouze dvě různé hodnoty na 1 milion řádků. 2/1000000 =velmi nízká selektivita.
Index s omezením UNIQUE nebo PRIMARY KEY má zaručenou selektivitu 1,0, takže bude vždy tak efektivní, jak jen může být index.
Ptali jste se na rozdíl mezi primárním klíčem a jedinečným omezením. Především jde o to, že můžete mít pouze jedno omezení primárního klíče na tabulku (i když definice tohoto omezení obsahuje více sloupců), zatímco můžete mít více jedinečných omezení. Sloupec s jedinečným omezením může povolit hodnoty NULL, zatímco sloupce v omezeních primárního klíče nesmí povolit hodnoty NULL. Jinak jsou primární klíč a jedinečný klíč ve své implementaci a použití velmi podobné.
V komentáři jste se zeptali, zda použít MyISAM nebo InnoDB. V MySQL používají termín storage engine . Mezi těmito dvěma úložnými motory je spousta jemných rozdílů, ale ty hlavní jsou:
- InnoDB podporuje transakce, takže se můžete rozhodnout vrátit zpět nebo potvrdit změny. MyISAM je v podstatě vždy automatický.
- InnoDB vynucuje omezení cizího klíče. MyISAM nevynucuje ani neukládá omezení cizích klíčů.
Pokud tyto funkce potřebujete ve své aplikaci, měli byste použít InnoDB.
Odpovědět na váš komentář není tak jednoduché. InnoDB je ve skutečnosti v několika případech rychlejší než MyISAM, takže záleží na tom, jaký mix výběrů, aktualizací, souběžných dotazů, indexů, konfigurace vyrovnávací paměti atd. má vaše aplikace.
Viz http:/ /www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ pro velmi důkladné srovnání výkonu úložných motorů. InnoDB vítězí nad MyISAM tak často, že není zjevně možné říci, že jeden je rychlejší než druhý.
Stejně jako u většiny otázek souvisejících s výkonem je to jediný způsob, jak na ně odpovědět pro vaši aplikaci je otestovat obě konfigurace pomocí vaší aplikace a reprezentativního vzorku dat a změřit výsledky.