MySQL索引不一定是唯一的,它可以是唯一的,也可以是重復(fù)的。下面詳細(xì)介紹。
當(dāng)一個(gè)表中的某一列有很多重復(fù)值時(shí),使用索引可以加快查詢(xún)操作。但這也意味著這些重復(fù)值在索引中會(huì)有多個(gè)重復(fù)的條目。
對(duì)于普通索引,如果列中有重復(fù)值,那么索引也會(huì)有重復(fù)值。比如說(shuō),一個(gè)人員信息表中有多個(gè)人擁有同一個(gè)生日,如果對(duì)這個(gè)生日列創(chuàng)建索引,那么索引中就會(huì)包含多個(gè)相同的生日值。
CREATE TABLE `personnel` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `birthday` date NOT NULL, PRIMARY KEY (`id`), KEY `birthday` (`birthday`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
以上是創(chuàng)建一個(gè)人員信息表的表結(jié)構(gòu),其中對(duì)birthday列創(chuàng)建索引。
而對(duì)于唯一索引,它要求列中的值是唯一的,否則會(huì)出現(xiàn)錯(cuò)誤。比如說(shuō),如果對(duì)username列創(chuàng)建唯一索引,那么在表中就不能有兩個(gè)相同的username。
CREATE TABLE `users` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `username` (`username`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
以上是創(chuàng)建一個(gè)用戶(hù)表的表結(jié)構(gòu),其中對(duì)username列創(chuàng)建唯一索引。
總的來(lái)說(shuō),索引可以是唯一的,也可以是重復(fù)的,具體需要根據(jù)實(shí)際情況來(lái)選擇。如果希望某個(gè)列中的值是唯一的,可以使用唯一索引;如果不需要唯一性,只是想提高查詢(xún)效率,可以使用普通索引。