索引高效查询
(一)概念
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 表名
3. 组合索引
(1)介绍
组合索引是将n个列组合成一个索引
其应用场景为:频繁的同时使用n列来进行查询,如:where n1 = ‘alex’ and n2 = 666。
(2)组合索引的创建
create index 索引名 on 表名(列名1,列名2...);
4. 主键索引
主键是索引也是约束,创建和删除方式跟我们之前学习创建和删除主键约束的方式一致;
5.哪些情况需要创建索引
1. 主键自动建立唯一索引,任何表一定要建主键
2. 频繁作为查询条件的字段应该创建索引
3. 查询中与其它表关联的字段,外键关系建立索引
4. 组合索引的选择问题, 组合索引性价比更高(最左原则)
5. 查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度
6. 查询中统计或者分组字段
7. 数据量大的表格
6.使用索引注意事项
1. 不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
2. mysql 在使用不等于(!= 或者<>)的时候无法使用索引会导致全表扫描
3. is not null 也无法使用索引,但是is null是可以使用索引的
4. like以通配符开头('%abc...')mysql索引失效会变成全表扫描的操作