美文网首页
SQL优化案例——位图索引让SQL更快

SQL优化案例——位图索引让SQL更快

作者: 小漠穷秋 | 来源:发表于2017-12-13 16:27 被阅读0次

涉及知识:
1.索引的区别2.回表的优化

问题现象:语句非常简单,在预算-启用方案时,会进行查询的调用。当预算方案过多的时候,distinct的执行效率会显示降低。
select
distinct fromitems ,
ctllevels
from
tb_ctrlscheme
where
ctrlsys = 'erm'

问题分析:
这里的ctrlsys字段基本不具有筛选性。这里我们可以先看一下目前的执行计划,在ctrlsys字段上存在索引。


image.png

从目前的执行计划可以得知,虽然走了where条件的索引,但是由于不具备选择性,所以走了index fast full scan。这样走效率较低,并且还要回表进行查询。
这里我们需要说明几点索引的道理:
1.索引的价值在快速定位。索引不记录空值,B+树索引的优势在于矮而胖。也就是可以通过简单几层的树形查找,迅速找到目标数值。
2.索引本身是有序的。
3.不同的索引有不同的功效。比如:
函数索引:where条件中如果存在函数运算,则索引字段无法生效。可以通过建立函数索引的方式来提高速度。
位图索引:通过建立位图,通过与或非的预算,一次锁定多位,来进行匹配。适用于数量多,基数少的场景。如性别字段。
倒排索引:为了减少热块的竞争。比如100001 100002 100003,如果正向建立索引,查找较慢。而将数值反转,则可以快速通过尾号进行筛选。此时非常适合使用倒排索引。
组合索引:将需要的字段进行多列的组合。比如想要取消回表,则可以通过建立组合索引的方式,让select的字段不再回表查询。组合索引的列的选择以及列的顺序比较有讲究。一般选择等值条件作为首列,一般需要尽可能的减少索引跳跃扫描。
这里我们通过建立组合位图索引,来解决distinct带来的效率问题。

问题解决:
create bitmap index unfromitems on tb_ctrlscheme(fromitems,ctllevels);
复制代码
这里我们将distinct的两列都列入位图索引。
在进行匹配的时候,可以使用到位图索引的特性,快速定位重复值。将原来需要十几秒的SQL变为只需要1秒。因此问题得到解决。
同时删掉了原来where字段上面的索引,避免回表。有的时候,查询索引+回表的效率要低于全表扫描,因为全表扫描可以一次读多个块。
同时我们还需要注意,各种索引失效的场景以及优劣势。
位图索引的劣势在于,一次需要锁定多个数据行。如果该表经常进行增删操作的话,索引维护的成本比较大,容易造成锁等待。所以,要基于场合进行优化。
最终的执行计划如下:


image.png

相关文章

  • SQL优化案例——位图索引让SQL更快

    涉及知识:1.索引的区别2.回表的优化 问题现象:语句非常简单,在预算-启用方案时,会进行查询的调用。当预算方案过...

  • MySQl优化学习笔记(七)SQL优化简介

    一、SQL优化简介 1、我们平时说的SQL优化就是优化SQl语句和索引(通俗说就是使用什么样的SQL语句能够让索引...

  • SQL Server数据库高级进阶之索引优化实战演练

    一、SQL Server索引优化本质 二、SQL Server索引存储机制 三、SQL Server索引类型分类 ...

  • sql优化的一般策略

    sql 优化的一般策略:索引优化,sql改写,参数优化,优化器 索引优化 以select * from vvsho...

  • mysql数据库优化

    1. Mysql优化介绍 1.1 sql优化 a. sql优化分析b. 索引优化c. 常用sql优化d. 常用优化...

  • MySQL 如何正确的使用索引

    学习索引,主要是写出更快的sql,当我们写sql的时候,需要明确的知道sql为什么会走索引?为什么有些sql不走索...

  • Mysql 优化

    1.Sql优化 1)sql优化分析2)索引优化3)sql语句优化4)一些常用的技巧优化 (正则、函数) 2.优化数...

  • Mysql索引

    提起优化 SQL,可能会把它理解为优化索引。简单来说这也不算错,索引在 SQL 优化中占了很大的比重。索引用得好,...

  • Mysql 优化提纲

    SQL & 索引 通过慢日志找到待优化的SQLs; explain 查询分析SQL执行计划; 索引优化; 数据库结...

  • SQL语句的优化

    sql语句的优化:多使用共享语句 尽量使你的sql语句能够使用索引。怎样使sql语句能够使用到索引呢:当sql语句...

网友评论

      本文标题: SQL优化案例——位图索引让SQL更快

      本文链接:https://www.haomeiwen.com/subject/nwczixtx.html