使用CREATE 語句創建索引
創建組合索引
CREATE INDEX index_name ON table_name(column_name,column_name) include(score)
普通索引
CREATE CLUSTERED INDEX index_name ON table_name(column_name);
CLUSTERED:表示要建立的索引時聚簇索引,即索引項的順序與表中記錄的物理順序一致的索引組織。
非空索引
CREATE UNIQUE INDEX index_name ON table_name (column_name) ;
主鍵索引
CREATE TABLE Primary_key(
id INT UNSIGNED COMMENT '無符號' PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(32) NOT NULL DEFAULT ' ');
CREATE PRIMARY KEY INDEX index_name ON table_name (column_name) ;
使用ALTER TABLE語句創建索引
##1.添加PRIMARY KEY(主鍵索引)
alter table `table_name` add primary key(`column`);
##2.添加UNIQUE(唯一索引)
alter table `table_name` add unique(`column`);
##3.添加普通索引
alter table `table_name` add index index_name(`column`);
##4.添加全文索引
alter table `table_name` add fulltext(`column`);
##5.添加多列索引
alter table `table_name` add index index_name(`column1`,`column2`,`column3`);
刪除索引
drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;
注當使用like時,%在前時,索引失效
SELECT id FROM t WHERE col LIKE 'Mich%'; -- 這個查詢將使用索引,
SELECT id FROM t WHERE col LIKE '%like'; --這個查詢不會使用索引。
注 聯合索引失效條件
不在索引列上做任何操作(計算、函數、(自動or手動)類型轉換),會導致索引失效而轉向全表掃描 存儲引擎不能使用索引範圍條件右邊的列
儘量使用覆蓋索引(只訪問索引的查詢(索引列和查詢列一致)),減少select *
mysql在使用不等於(!=或者<>)的時候無法使用索引會導致全表掃描
is null,is not null也無法使用索引
ike以通配符開頭(’%abc…’)mysql索引失效會變成全表掃描的操作。問題:解決like‘%字符串%’時索引不被使用的方法?
## 字符串不加單引號會使索引失效
SELECT * from staffs where name='2000'; -- 因爲mysql會在底層對其進行隱式的類型轉換
SELECT * from staffs where name=2000; --- 未使用索引