索引作為一種數據結構,其用途是用于提升檢索數據的效率。
分類
普通索引(INDEX):索引列值可重復
唯一索引(UNIQUE):索引列值必須唯一,可以為NULL
主鍵索引(PRIMARY KEY):索引列值必須唯一,不能為NULL,一個表只能有一個主鍵索引
全文索引(FULL TEXT):給每個字段創建索引
1.創建索引
1.1?普通索引(INDEX)
1.1.1??在創建表時指定
mysql> create table student1(id int not null, name varchar(100) not null, birthdy date, sex char(1) not null, index nameindex (name(50)));
Query OK, 0 rows affected (0.02 sec)
1.1.2??基于表結構創建
mysql> create table student2(id int not null, name varchar(100) not null, birthday date, sex char(1) not null);
Query OK, 0 rows affected (0.01 sec)mysql> create index nameindex on student2(name(50));
1.1.3??修改表結構創建
mysql> create table student3(id int not null, name varchar(100) not null, birthday date, sex char(1) not null);
Query OK, 0 rows affected (0.01 sec)mysql> ALTER TABLE student3 ADD INDEX nameIndex(name(50));
1.2?唯一索引(UNIQUE)
1.2.1??在創建表時指定
mysql> create table student4(id int not null, name varchar(100) not null, birthday date, sex char(1) not null, unique index id_idex (id));
Query OK, 0 rows affected (0.00 sec)
1.2.2??基于表結構創建
mysql> create table student5(id int not null, name varchar(100) not null, birthday date, sex char(1) not null);
Query OK, 0 rows affected (0.00 sec)mysql> CREATE unique INDEX idIndex ON student5(id);
2.?刪除索引
2.1?普通索引(INDEX)
2.1.1?直接刪除
mysql> DROP INDEX nameIndex ON student1;
2.1.2?修改表結構刪除
mysql> ALTER TABLE student2 DROP INDEX nameIndex;
2.2?唯一索引(UNIQUE)
2.2.1?直接刪除
mysql> DROP INDEX idIndex ON student4;
2.2.2?修改表結構刪除
mysql> ALTER TABLE student DROP INDEX idIndex;
2.3?查看索引
mysql> SHOW INDEX FROM tab_name;
3.問題:
3.1?導致SQL執行慢的原因:
1.硬件問題。如網絡速度慢,內存不足,I/O吞吐量小,磁盤空間滿了等。
2.沒有索引或者索引失效.
3.數據過多
3.2?索引失效的原因:
運用函數
統計信息不準確:當表中的數據發生大量的插入、更新或者刪除操作后,統計信息可能就不再準確
數據分布不均
或(兩者都對)
數據類型不匹配
大量的模糊查詢
函數的大量使用
注意點:
index(key)每張表可以有很多列做index,必須的起名
索引:當查詢速度過慢可以通過建立優化查詢速度,可以當作調優