标签:tps code operator 扩展 href 出现 磁盘 style 查询优化
数据库索引是存储在磁盘上的,当数据量比较大的时候,索引的大小将会达到几个G。当我们利用索引查询的时候,无法把整个索引全部加载到内存中。而是逐一加载每一个磁盘页,这里的磁盘页对应索引树的结点。
B-树,一种平衡多路查找树。适用于查找磁盘中的大量数据。为了减少IO次数,B树最明显的特征是“矮胖的”,即深度较小。初次之外,还有如下特征:
注:B-树(中间的不是减),B是Balance的意思。
如下图所示是一个3阶的B树。
当单一节点中的关键字更多时,查询的比较次数会更多,但是可以减少IO读写次数。在这里我们需要知道的是在内存中的比较耗时机会可以忽略,IO次数足够小,就可以提升查找性能。
B+树是基于B-树的一种变体,有着比B-树更高的查询性能。B+树具有如下特征:
索引的数据结构是B+树。如下图所示,B+树的节点通常被表示为一组有序的数据项和子指针。图中第一个节点包含数据项3和5,包含三个指针,第一个指针指向其数据项均小于3的节点,第二个指针指向其数据项介于3~5的节点,最后一个指针指向其数据项大于等于5的节点。
从上面我们发现一个很重要的特性,每一个父节点的数据项都出现在子节点中,是子节点最大或最小的数据项。这其实也表明了,非叶子节点不存储真实的数据,只存储指引搜索方向的数据项,如3,5并不真实存在于数据表中。B+树的叶子结点存储的键值对应data数据的物理地址。
树形结构查找速度快的原因此处不再赘述。
如下查询语句
select
count(*)
from
task
where
status=2
and operator_id=20839
and operate_time>1371169729
and operate_time<1371174603
and type=2;
根据最左匹配原则,最开始的sql语句的索引应该是status、operator_id、type、operate_time的联合索引;其中status、operator_id、type的顺序可以颠倒。
但是这只是一种语句,我们其实需要把这个表所有查询都找到,进行综合定夺。
标签:tps code operator 扩展 href 出现 磁盘 style 查询优化
原文地址:https://www.cnblogs.com/MrSaver/p/11277790.html