普通索引
創(chuàng)建索引
CREATE INDEX indexName ON mytable(username(length));
修改表結(jié)構(gòu)(添加索引)
ALTER table tableName ADD INDEX indexName(columnName)
創(chuàng)建表的時候直接指定
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
刪除索引的語法
DROP INDEX [indexName] ON mytable;
唯一索引
它與前面的普通索引類似交煞,不同的就是:索引列的值必須唯一,但允許有空值施无。如果是組合索引幅慌,則列值的組合必須唯一较解。它有以下幾種創(chuàng)建方式:
創(chuàng)建索引
CREATE UNIQUE INDEX indexName ON mytable(username(length))
修改表結(jié)構(gòu)
ALTER table mytable ADD UNIQUE [indexName] (username(length))
創(chuàng)建表的時候直接指定
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
UNIQUE [indexName] (username(length))
);
使用ALTER 命令添加和刪除索引
有四種方式來添加數(shù)據(jù)表的索引:
ALTER TABLE tbl_name ADD PRIMARY KEY (column_list): 該語句添加一個主鍵胸墙,這意味著索引值必須是唯一的祖驱,且不能為NULL。
ALTER TABLE tbl_name ADD UNIQUE index_name (column_list): 這條語句創(chuàng)建索引的值必須是唯一的(除了NULL外挖帘,NULL可能會出現(xiàn)多次)完丽。
ALTER TABLE tbl_name ADD INDEX index_name (column_list): 添加普通索引,索引值可出現(xiàn)多次拇舀。
ALTER TABLE tbl_name ADD FULLTEXT index_name (column_list):該語句指定了索引為 FULLTEXT 逻族,用于全文索引。
以下實例為在表中添加索引骄崩。
mysql> ALTER TABLE testalter_tbl ADD INDEX (c);
你還可以在 ALTER 命令中使用 DROP 子句來刪除索引聘鳞。嘗試以下實例刪除索引:
mysql> ALTER TABLE testalter_tbl DROP INDEX c;
使用 ALTER 命令添加和刪除主鍵
主鍵只能作用于一個列上,添加主鍵索引時要拂,你需要確保該主鍵默認不為空(NOT NULL)抠璃。實例如下:
mysql> ALTER TABLE testalter_tbl MODIFY i INT NOT NULL;
mysql> ALTER TABLE testalter_tbl ADD PRIMARY KEY (i);
你也可以使用 ALTER 命令刪除主鍵:
mysql> ALTER TABLE testalter_tbl DROP PRIMARY KEY;
刪除主鍵時只需指定PRIMARY KEY,但在刪除索引時脱惰,你必須知道索引名鸡典。
顯示索引信息
你可以使用 SHOW INDEX 命令來列出表中的相關(guān)的索引信息∏姑ⅲ可以通過添加 \G 來格式化輸出信息彻况。
嘗試以下實例:
mysql> SHOW INDEX FROM table_name; \G
........
MySQL: 索引以B樹格式保存
Memory存儲引擎可以選擇Hash或BTree索引,Hash索引只能用于=或<=>的等式比較舅踪。
1纽甘、普通索引:create index on Tablename(列的列表)
alter table TableName add index (列的列表)
create table TableName([...], index [IndexName] (列的列表)
2、唯一性索引:create unique index
alter ... add unique
主鍵:一種唯一性索引抽碌,必須指定為primary key
3悍赢、全文索引:從3.23.23版開始支持全文索引和全文檢索决瞳,F(xiàn)ULLTEXT,
可以在char左权、varchar或text類型的列上創(chuàng)建皮胡。
4、單列索引赏迟、多列索引:
多個單列索引與單個多列索引的查詢效果不同屡贺,因為:
執(zhí)行查詢時,MySQL只能使用一個索引锌杀,會從多個索引中選擇一個限制最為嚴格的索引甩栈。
5、最左前綴(Leftmost Prefixing):多列索引糕再,例如:fname_lname_age索引量没,以下的搜索條件MySQL都將使用
fname_lname_age索引:firstname,lastname,age;firstname,lastname突想;firstname殴蹄,其他情況將不使用。