索引(Index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結構,即索引是數(shù)據(jù)結構。
1. 普通索引
1.創(chuàng)建方法:
(1)直接基于表創(chuàng)建:
CREATE INDEX indexName ON table_name(column_name(length));
(2)修改表結構創(chuàng)建:
ALTER table table_name ADD INDEX index_name(column_name);
(3)創(chuàng)建表的時候直接指定:
CREATE TABLE table_name(
ID INT NOT NULL,
...
INDEX [index_name] (column_name(length))
);
例:
CREATE TABLE book(
id INT NOT NULL,
bookname VARCHAR(100) NOT NULL,
authors VARCHAR(100) NOT NULL,
INDEX book_id(id)
);
2. 唯一索引(UNIQUE)
索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。
1.創(chuàng)建方式:
(1)創(chuàng)建索引
CREATE UNIQUE INDEX indexName ON table_name (column_name(length))
(2)修改表結構
ALTER table table_name ADD UNIQUE [indexName] (column_name(length))
(3)創(chuàng)建表的時候直接指定
CREATE TABLE table_name(
ID INT NOT NULL,
...
UNIQUE [indexName] (column_name(length))
);
例:
CREATE TABLE subject(
id INT NOT NULL,
UNIQUE id_student (column_name(length))
);
3. 主鍵索引
主鍵是一種唯一性索引,但它必須指定為“PRIMARY KEY”,每個表只能有一個主鍵,不允許出現(xiàn)相同的值
創(chuàng)建語法:
CREATE TABLE table_name(
ID INT NOT NULL,
...
PRIMARY KEY (column_name(length))
);
也可以通過修改表的方式加入主鍵:
ALTER table table_name ADD PRIMARY KEY (column_name);
例:
CREATE TABLE student(
id INT NOT NULL PRIMARY KEY auto_increment,
name VARCHAR(100) NOT NULL
);
4. 全文索引
全文索引主要針對文本文件,比如文章,標題,也可以針對值中的某個單詞,但效率確實不敢恭維,較少使用
ALTER TABLE table_name ADD FULLTEXT index_name ((column_name);
例:
create table article(
id int primary key auto_increment ,
title varchar(20),
content text,
fulltext(title,content)
)engine=myisam charset utf8;
insert into article(title,content) values
('MySQL Tutorial','DBMS stands for DataBase ...'),
('How To Use MySQL Well','After you went through a ...'),
('Optimizing MySQL','In this tutorial we will show ...'),
('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),
('MySQL vs. YourSQL','In the following database comparison ...'),
('MySQL Security','When configured properly, MySQL ...');
5. 刪除索引
(1)直接刪除:
DROP INDEX index_name ON table_name;
(2)修改表結構刪除:
ALTER TABLE table_name DROP INDEX index_name;
例:
DROP INDEX id_student ON student;
索引的好處:
能夠提高數(shù)據(jù)檢索的效率,如果能夠在進行排序分組操作中利用好索引,將會極大地降低CPU資源的消耗。
索引的弊端:
由于索引也是數(shù)據(jù)結構,創(chuàng)建索引會增加存儲空間的占用,同時更新數(shù)據(jù)也會增加更新所帶來的 IO 量和調整索引所致的計算量。
何時創(chuàng)建索引?
1. 較頻繁的作為查詢條件的字段應該創(chuàng)建索引
2. 唯一性太差的字段不適合單獨創(chuàng)建索引,即使頻繁作為查詢條件
3. 更新非常頻繁的字段不適合創(chuàng)建索引
4. 不會出現(xiàn)在 WHERE 子句中的字段不該創(chuàng)建索引