使用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; --- 未使用索引