浅谈索引
引言
作为一名web程序员,和数据库打交道是必不可少的,为了优化查询的效率,我们最常想到的方法应该就是添加索引了,为了能够更好的使用索引,我们应该对它多做一些了解。
索引是什么
数据库对象的索引其实和书的目录很类似,它的目的就是为了提高从表中检索字段的速度。
实现原理是特定字段先执行一次排序,然后每次需要指定数据前,先对从索引中查询,因为索引是特殊的数据结构,所以查询速度非常快。
索引类型
常见的索引类型有三种,全文索引,唯一索引,普通索引.
索引方法
在mysql数据中,常用的索引方法有B-Tree索引,哈希索引
哈希索引,是把使用哈希函数,映射到哈希表上,这种查找数据的方式空间复杂度是O(n),时间复杂度是O(1);
但是哈希索引只能对某一特定数据进行查找,没有办法查询到某一数据段集合所需要的数据。(ps:innoDB与MyISAM不支持hash索引,所以一般直接选择B树索引即可)
B-Tree索引,要想了解B-Tree索引,那么首先你就不得不了解B-Tree这种数据结构,它是一种多路平衡搜索树,可以对区间进行查找,在B-Tree中,所有的数据都保存在叶节点,进行区间查找的时候,首先找到区间最小值,然后找到最大值,在这之间所有的数据即为查找的数据
什么情况下用什么索引
经常查询的字段,或者说总是在where字句中出现
order by或者group by的字段
主键或者外键
唯一完整性约束等
选择合适的索引方法
选择索引的时候,索引类型对应数据的特性,而索引方法则对应查找的方法,如果没有建立正确的索引,那么还不如不建立索引,其实大多数情况下,选择普通索引方法即可,但是存在某些特殊的情况,我们需要特定的索引
比如说唯一索引,唯一索引或者说更多的是一种约束,当某一字段具有唯一性质时,选择唯一索引,如主键和外键等。
如果某字段数据比较大,如保存的是某一篇博客的内容,并且改动较少,那么可以建立全文索引,全文索引比较消耗内存空间
尾语
索引是一种优化查询效率的方法,但是请不要滥用,滥用索引真的还不如不用索引。