MySql索引
(SQL where 条件中排除越多的条件放在第一个)
基本概念
我们可以通过对数据表中字段创建索引 来提高查询速度 MySQL索引可提升查询效率
常见的索引分类:
- 主键索引(primary key):主键是一个唯一性的索引 每个表中只能有一个主键
- 唯一索引(unique):索引列的所有数据只能出现一次,必须是唯一
- 普通索引(index):最常见的索引 ,作用是提高对数据的访问数据
表对应的索引被保存在一个索引文件中,如果对数据进行增删改操作,MySql就需要对索引进行更新,所以虽然索引能提高查询效率,但也会占用一定的磁盘空间,若为所有的字段都添加上索引,效率反而是会下降
创建索引
主键索引
先创建一张表
CREATE TABLE demo01(
did INT,
dname VARCHAR(20),
hobby VARCHAR(30)
);
- 方法1 创建表的时候 直接添加主键
CREATE TABLE 表名( --
添加主键
字段名 类型 PRIMARY KEY,
);
- 方式2 创建表之后修改表结构 添加主键索引
-- 为demo01表添加主键
ALTER TABLE demo01 ADD PRIMARY KEY(did);
唯一索引
索引列的所有值都只能出现一次, 必须唯一
- 方法一: 创建表的时候直接添加主键索引
CREATE TABLE 表名(
列名 类型(长度),
-- 添加唯一索引
UNIQUE [索引名称] (列名)
);
- 方法二 : 使用create语句在已有的表上创建索引
create unique index 索引名 on 表名(列名(长度))
-- 为demo01表的hobby创建唯一索引
CREATE UNIQUE INDEX ind_hobby ON demo01(hobby);
添加唯一索引的所有值都只能出现一次,保证数据的唯一性,也提升了查询效率
添加了就会报错
普通索引
普通索引(关键字KEY或INDEX)的唯一任务是加快对数据的访问速度。因此,应该只为那些最经常出现在查询条件(WHERE column=)或排序条件(ORDERBY column)中的数据列创建索引
-
方式一
create index 索引名 on 表名(列名[长度])
-
方式二
ALTER TABLE 表名 ADD INDEX 索引名 (列名)
-- 为demo01表中 dname字段添加普通索引
ALTER TABLE demo01 ADD INDEX ind_dname(dname);
删除索引
ALTER TABLE table_name DROP INDEX index_name;
-- 删除dname字段上的索引
ALTER TABLE demo01 DROP INDEX ind_dname;
索引的总结
创建索引的原则:
- 应优先选择在 where 及 order by 涉及的列上建立索引
- 优点:大大的提高查询速度和减少查询中分组和排序的时间,并可以通过创建唯一索引保证数据的唯一性
- 缺点:创建索引和维护索引需要时间,而且数据量越大时间越长;当表中的数据进行增删改操作时,索引也要同时进行维护,降低了数据的维护速度;索引文件需要占据磁盘空间