索引是什么?
索引是一种数据结构,一种可以提高数据库检索目标数据性能的数据结构。
数据库还维护着满足特定查找算法的数据结构,实现了高级查找算法。
一般来说索引本身也很大,基本上都是以索引文件的形式存储在磁盘上的,唯一索引默认是使用B+树索引。
索引的优缺点
优点:提高数据的检索效率,降低数据的IO成本,通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。
缺点:索引也是一张表,它记录了主键和索引字段,并指向实体表的记录,索引也是要占用磁盘空间的,索引虽然提高了查询速度,但是他会降低更新表数据的速度,因为它要同时更新索引。
索引的分类
单值索引:即一个索引只包含单个列,一个表可以有多个单列索引;
唯一索引:索引列的值必须唯一,允许有空值;
复合索引:一个索引包含了多个列
索引语法
创建索引
建表时创建索引
CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX 自定义索引名
[USING 索引类型]
ON 表名(列名[,列名...]);
动态添加索引
1、 给表添加主键或者唯一约束的时候会自动添加索引;
2、 给表添加普通索引;
(索引值可以出现多次)
ALTER TABLE 表名 ADD INDEX 索引名(字段[列表])
1、 给表添加全文索引;
ALTER TABLE 表名 ADD FULLTEXT 索引名(字段[列表])
查看索引
SHOW INDEX FROM 表名;
删除索引
DROP INDEX 索引名 ON 表名;
索引的使用原则
1、 对查询频率较高并且数量大的表可以创建索引;
2、 在查询时的where条件中,挑选出最常用过滤效果最好的列的组合来创建索引;
3、 对于频繁更新数据的表,但是查询频率不高的表,少创建索引;
4、 使用短索引,假如构成索引的字段总长度比较短,那么可以减少磁盘存储,相应的就可以提高索引的I/O效率;
5、 组合索引,相当于创建了多个索引,如果where条件中使用了组合索引的某几个字断,那么mysql就可以利用组合索引来提升查询效率;
例如:
create index user on name_age_email(name,age,email);
相当于
对name创建了索引;
对name,age创建了索引;
对name,age,email创建了索引;