MySQL 索引

索引高效查询

(一)概念

1. 索引是一种特殊的文件,它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度
    
    
    桑拿房中钥匙


(二)索引的分类

1. 普通索引 :仅加速查询 
2. 唯一索引 :加速查询 + 列值唯一(可以有null) 
3. 组合索引 :多列值组成一个索引, 
4. 主键索引:加速查询 + 列值唯一 + 表中只有一个(不可以有null)

(三)索引的创建

1. 普通索引的创建
(1)创建表的时候创建索引 
语法:		
CREATE TABLE tbl_name(
	字段名称 字段类型 [完整性约束条件],
	....
 	INDEX [索引名称](字段名称)
);
(2) 在已经存在的表上创建索引: 
语法:
	1.CREATE INDEX 索引名称 ON 表名(字段名)
	2.ALTER TABLE 表名 ADD INDEX 索引名称(字段名称);
(3)查看索引
	show index from 表名;
(4) 删除索引 
	drop index 索引名 on 表名;
2.唯一索引的创建
(1) 创建表的时候创建唯一索引 
create table 表名(
 nid int not null auto_increment primary key,
 name varchar(32) not null,
 email varchar(64) not null,
 extra text,
 -- 把name设置为唯一索引,名称为ix_name
 unique ix_name (name)
)
(2)在已经存在的表上创建唯一索引: 
语法:
	create unique index 索引名 on 表名(列名)
(3)删除唯一索引
	语法 :drop index 索引名 on 表名

1612621198503

3. 组合索引
(1)介绍
	组合索引是将n个列组合成一个索引
	其应用场景为:频繁的同时使用n列来进行查询,如:where n1 = ‘alex’ and n2 = 666。
(2)组合索引的创建
	create index 索引名 on 表名(列名1,列名2...);

image

4. 主键索引
主键是索引也是约束,创建和删除方式跟我们之前学习创建和删除主键约束的方式一致;
5.哪些情况需要创建索引
1. 主键自动建立唯一索引,任何表一定要建主键
2. 频繁作为查询条件的字段应该创建索引
3. 查询中与其它表关联的字段,外键关系建立索引
4. 组合索引的选择问题, 组合索引性价比更高(最左原则)
5. 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
6. 查询中统计或者分组字段
7. 数据量大的表格

6.使用索引注意事项
1. 不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
2. mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描
3. is not null 也无法使用索引,但是is null是可以使用索引的
4. like以通配符开头('%abc...')mysql索引失效会变成全表扫描的操作



原文地址:https://www.cnblogs.com/conglingkaishi/p/15215457.html