数据库索引能够提高数据库的查询效率,那么索引到底是什么。
什么是索引
索引本身这个名字已经能回答这个问题了,索引就是目录,就像通过目录快速查找词典中某个词语一样,索引能够快速定位到要查找数据所在的位置。没有索引,计算机只能一行一行的遍历所有数据,找出符合项,也就是进行全表扫面。
MYSQL官方定义:索引是一种数据结构。
实现原理
索引的数据结构主要有BTree索引,哈希索引等几种实现方式,一般使用BTree较多,因为BTree存储数值是有序的。被添加索引的字段,该字段下的值会被存储到对应数据结构中。
有student表:
CREATE TABLE student(
name varchar(20),
age int
) ;
如果没有索引,我们使用SELECT name FROM student WHERE name='dingjunzhi';
查询数据时,计算机会对对每一条数据进行比较,看是否满足name='dingjunzhi'
这个查询条件,找到了满足的数据也不会停止,因为可能会有多条数据满足条件。
CREATE INDEX name_index ON student (name);
当我们添加索引后,name
字段下的值会被有序存储到一个BTree结构,BTree的查找效率比全盘扫面高得多。因此再次使用同样SQL语句查询时,会先在索引的数据结构中,找到 "dingjunzhi"对应的值,和该值存储在一起的,还有原表中该项的存储地址,类似("dingjunzhi",0x111),再通过地址找到该条数据。
总结
合理使用索引,能够有效避免全盘扫描,提升检索速度,同时如果对索引使用不当,可能会使一些索引失效,之后文章会分析。
网友评论