为什么要使用索引
索引在数据库中的作用是快速找出某个列中一个特定值的行,不使用索引的话,MySQL必须从第一条记录遍历到相关行,表越大,花费的时间越多,但是如果有索引,就能快速的到达某个位置去搜索数据文件,索引对于优化数据库查询速度有着不可替代的作用。
索引的优点
-
通过创建索引,可以保证数据库中每一条数据的唯一性
-
可以大大提高查询的效率
-
可以加速表与表之间的连接
-
可以显著的减少查询中分组和排序的时间
总结:查询速度快
索引的缺点
-
创建索引和维护索引需要时间,而且数据量越大时间越长
-
创建索引占用磁盘空间,如有大量索引,可能比数据文件更快达到最大文件尺寸
-
对表中的数据进行增加、修改、删除的时候,索引也要同时维护,降低了数据的维护速度
总结:维护效率低
索引的分类
- 普通索引(Normal): 基本索引类型,允许在定义索引的列里插入空值或重复值。
- 唯一索引(Unique): 索引列值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。主键索引是一种特殊的唯一索引,不允许有空值。
- 单列索引: 只包含一个列的索引,一个表中可以有多个。
- 组合索引: 包含多个列的索引,查询条件包含这些列的最左边的字段的时候,索引就会被引用,遵循最左缀原则。
- 全文索引(Full Text): 在定义的值中支持全文查找,允许空值和重复值,可以在CHAR,VARCHAR或者TEXT字段类型上创建,仅支持MyISAM存储引擎。
- 空间索引: 针对空间数据做的索引,支持的数据类型有4种,分别是GEOMETRY,POINT,LINESTRING和POLYGON。创建空间索引的列必须声明为非空值(NOT NULL),仅支持MyISAM存储引擎。
索引设计原则
-
不是越多越好
-
常更新的表越少越好
-
数据量小的表最好不要建立索引
-
不同的值比较多的列才需要建立索引
-
某种数据本身具备唯一性的时候,建立唯一性索引,可以保证定义的列的数据完整性,以提高查询熟度
-
频繁进行排序或分组的列(group by或者是order by)可以建立索引,提高搜索速度
-
经常用于查询条件的字段应该建立索引
总结:够用就好!