数据库优化学习笔记(四)

索引基本介绍

没有索引的情况下,查找数据是遍历表所有数据,因为实际的查询的某个值记录不止一条,得查找到最后一条才能确定唯一。

对要查找的条件列建立索引,会在数据库中存放一个索引文件,存储结构为B树。


B树索引检索过程

上图建立了Iname_pinyin字段的索引,查找数据时从根节点开始一直查找到叶节点,直到查找到对应值的主键地址,再在原表中查找记录。

主键建立的索引叫 丛生索引,该索引在叶子节点存储的是实际的数据,不是地址。

这里知道了索引大概的原理,但实际索引存储的数据结构有很多种,这里不深入研究了。


索引实效的场合总结

这个比较重要,这里介绍四点可能会导致索引失效的情况:

1、进行后方一致/部分一致检索的场合。

例:select * from employee where column_name like '%w%';

select * from employee where column_name like '%w';

2.使用了is not null、!=、<>比较运算的场合

在数据库优化学习笔记(一)中说过,不要使用不等号,要一一列举出来。

3、对列使用了运算/函数的场合

例:select * from table_name where YEAR(birth) = '1980';

4、复合索引的第一列没有包含在where条件语句中的场合

例如创建了这个索引:create index idx_pinyin on employee(lname_pinyin,fname_pinyin);针对上面这个索引,下面两种情况索引是有效的:

√select * from employee where lname_pinyin = 'wang';

√select * from employee where lname_pinyin = 'wang' and fname_pinyin ='xiao';

以下两种情况是会失效的:

×select * from employee where fname_pinyin ='xiao';

×select * from employee where lname_pinyin = 'wang' or fname_pinyin ='xiao';

第二条用了or关键字,所以还要单独对fname_pinyin列进行检索,因此也会失效。

你可能感兴趣的:(数据库优化学习笔记(四))