MySQL索引類型
- 普通索引
創建索引的方式
-- 直接新建索引
CREATE INDEX indexName ON mytable(username(length))
-- 修改表結構新建索引
ALTER mytable ADD INDEX [indexName] ON (username(length))
-- 創建表的時候 建立索引
CREATE TABLE mytable(ID INT NOT NULL,username VARCHAR(16) NOT NULL,INDEX [indexName] (username(length)) )
-- 刪除索引的語法
DROP INDEX [indexName] ON mytable;
如果是CHAR或者VARCHAR類型,length可以小於字段實際長度;如果是BLOB或TEXT類型,必須指定length。
- 唯一索引
它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。
-- 創建唯一索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
-- 修改表結構
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
-- 創建表的時候直接指定
CREATE TABLE mytable(ID INT NOT NULL,username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)));
- 主鍵索引(即主鍵)
特殊的唯一索引, 不允許有空值。一般是在建表的時候同時創建主鍵索引。
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
PRIMARY KEY(ID)
);
- 組合索引
單個索引項里包含多個字段。
ALTER TABLE mytable ADD INDEX name_city_age (username(10),city,age);
最左前綴原則: 只從最左面的開始組合。比如上面就是建立了 username city , username age ,username city age 。並沒有city age 這樣的組合索引。
使用MySQL索引注意事項
- 索引不會包含有NULL值的列
只要列中有包含NULL值都將不會被包含在索引里,復合索引中只要有一列含有NULL值,那么這一列對此復合索引都是無效的。 - 使用短索引
對於串列進行索引,如果可能應該指定一個前綴長度。例如:如果有一個CHAR(255)的列,如果前10個或20個字符內,多數值是唯一的,那么就不要對整個列進行索引。短索引不僅可以提高查詢數據而且可以節省磁盤空間和I/O操作。 - 索引排序
MySQL查詢只使用一個索引,因此如果where子句中已經使用了索引的話,那么order by中的列是不會使用索引的。因此數據庫默認排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列創建復合索引。 - like語句操作
一般情況下不鼓勵使用like操作,如果非使用不可,請盡量使用like "aaa%"而非like "%aaaa%",因為前者是可以使用索引的,而后者不會。 - 盡量少使用NOT IN和<>操作.
