您好,登錄后才能下訂單哦!
MySQL中索引的類型
一般可分為四類:
普通索引
這是最基本的索引,它沒有任何限制。它有以下幾種創(chuàng)建方式:
1.創(chuàng)建索引
代碼如下:
CREATE INDEX indexName ON mytable(username(length));
如果是 CHAR,VARCHAR 類型,length 可以小于字段實(shí)際長(zhǎng)度;如果是 BLOB 和 TEXT 類型,必須指定 length,下同。
2.修改表結(jié)構(gòu)
代碼如下:
ALTER mytable ADD INDEX [indexName] ON (username(length))
創(chuàng)建表的時(shí)候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
刪除索引的語(yǔ)法:
DROP INDEX [indexName] ON mytable;
唯一索引
它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創(chuàng)建方式:
CREATE UNIQUE INDEX indexName ON mytable(username(length))
修改表結(jié)構(gòu):
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
創(chuàng)建表的時(shí)候直接指定:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );
主鍵索引
它是一種特殊的唯一索引,不允許有空值。一般是在建表的時(shí)候同時(shí)創(chuàng)建主鍵索引:
代碼如下:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );
當(dāng)然也可以用 ALTER 命令。記?。阂粋€(gè)表只能有一個(gè)主鍵。
聯(lián)合索引
為了形象地對(duì)比單列索引和組合索引,為表添加多個(gè)字段:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL );
為了進(jìn)一步榨取 MySQL 的效率,就要考慮建立組合索引。就是將 name, city, age 建到一個(gè)索引里:
代碼如下:
ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age);
索引用不上的情況
索引不是每次都可以生效的,如果我們操作不對(duì),那么很有可能是走全表掃描而不是走的索引,Explain 中的 possible_key、key_len 以及 key 參數(shù)都可以分析我們的 SQL 語(yǔ)句是否用到了索引。
以下情況將會(huì)導(dǎo)致索引失效
以上都可以使用 Explain 進(jìn)行測(cè)試是否用到了索引。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)億速云的支持。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。