博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL优化案例-正确的使用索引(二)
阅读量:2446 次
发布时间:2019-05-10

本文共 2186 字,大约阅读时间需要 7 分钟。

下面
sql 
30秒执行出结果,查看sql谓词中有like,我们知道谓词中有这样的语句是不走索引的(为了保护客户的隐私,表名和部分列已经重命名)。

点击(此处)折叠或打开

  1. SELECT /*+1*/
  2. CHECKNUM AS PINGZBSM,
  3. CHECKDATE,
  4. XXXMODE,
  5. XXXRESULT,
  6. (SELECT RESULT
  7. FROM (select ID,to_char(WMSYS.WM_CONCAT(xxxnum||xxxtype||xxxmode||xxxresult)) RESULT
  8.        from OOOO_XXXCHECKLOG
  9.       WHERE CHECKDATE BETWEEN DATE'2018-05-04' AND DATE'2018-05-04' and xxxtype like '%PAR'
  10.       GROUP BY ID
  11.     ) b where b.id=a.id
  12. ) RESULT,
  13. CLERKNUM AS CHECKNUM
  14. FROM OOO_XXXECHECKLOG A;
逻辑读600多万。查看索引情况如下
表过滤返回数据量如下:

点击(此处)折叠或打开

  1. SQL> select count(*) from OOOO_XXXCHECKLOG;
  2. 2799616
  3. select count(*) from OOOO_XXXCHECKLOG WHERE CHECKDATE BETWEEN DATE'2018-05-04' AND DATE'2018-05-04' and xxxtype like '%PAR';
  4.  12856
  5. select count(*) from OOOO_XXXCHECKLOG WHERE CHECKDATE BETWEEN DATE'2018-05-04' AND DATE'2018-05-04';
  6. 197984

通过查询上面返回数据可知,因为xxxtype不走索引,所以通过索引要回表197984次,如果走了索引只回表12856次。

下面我们建立REVERSE索引IDX_ID_TYPE_RE

点击(此处)折叠或打开

  1. SELECT /*+OOOO_XXXCHECKLOG index(IDX_ID_TYPE_RE) 2*/
  2. CHECKNUM AS PINGZBSM,
  3. CHECKDATE,
  4. XXXMODE,
  5. XXXRESULT,
  6. (SELECT RESULT
  7. FROM (select ID,to_char(WMSYS.WM_CONCAT(xxxnum||xxxtype||xxxmode||xxxresult)) RESULT
  8.        from OOOO_XXXCHECKLOG
  9.       WHERE CHECKDATE BETWEEN DATE'2018-05-04' AND DATE'2018-05-04' and REVERSE(xxxtype) like 'RAP%'
  10.       GROUP BY ID
  11.     ) b where b.id=a.id
  12. ) RESULT,
  13. CLERKNUM AS CHECKNUM
  14. FROM OOO_XXXECHECKLOG A;
查看执行计划如下,逻辑读将为300万,但是时间还是维持在
18
秒,根本原因在于这个索引因为标量子查询的问题被访问
700
万次导致。
   
下面我们改写sql如下

点击(此处)折叠或打开

  1. SELECT /*+ index(OOOO_XXXCHECKLOG IDX_ID_TYPE_RE) 3*/
  2. CHECKNUM AS PINGZBSM,
  3. CHECKDATE,
  4. XXXMODE,
  5. XXXRESULT,
  6. B.RESULT,
  7. CLERKNUM AS CHECKNUM
  8. FROM OOO_XXXECHECKLOG A
  9. left join (select ID,to_char(WMSYS.WM_CONCAT(xxxnum||xxxtype||xxxmode||xxxresult)) RESULT
  10.        from OOOO_XXXCHECKLOG
  11.       WHERE CHECKDATE BETWEEN DATE'2018-05-04' AND DATE'2018-05-04' and REVERSE(xxxtype) like 'RAP%'
  12.       GROUP BY ID
  13.     ) b on b.id=a.id;

执行计划中出现index_skip_scan。 

下面我们创建如下索引:

点击(此处)折叠或打开

  1. create index idx_date_seal_re on OOOO_XXXCHECKLOG(CHECKDATE,REVERSE(xxxtype));
   
可以看到,逻辑读降到64424,
50
个物理读是因为刚刚创建索引的原因,
sql
也秒出。

| 作者简介

姚崇·沃趣科技高级数据库技术专家

熟悉Oracle数据库内部机制,丰富的数据库及RAC集群层故障诊断、性能调优、OWI、数据库备份恢复及迁移经验。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28218939/viewspace-2155102/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28218939/viewspace-2155102/

你可能感兴趣的文章
电子书pdf文件网站_如何转换PDF文件以便于阅读电子书
查看>>
如何在PowerPoint中水平翻转图片
查看>>
如何从Excel列表中的Word中创建邮件标签
查看>>
如何在Linux启动时轻松挂载分区
查看>>
outlook 加载配置项_如何禁用Outlook加载项进行故障排除
查看>>
如何导出或删除Outlook.com搜索历史记录
查看>>
dd-wrt固件_如何使用DD-WRT优先安排网络流量
查看>>
如何将您的计算机变成带有病态胡须的增压TiVo
查看>>
如何在Facebook Messenger中启用暗模式
查看>>
如何远程锁定或擦除iOS 5设备
查看>>
如何重命名您的AirPods
查看>>
powerpoint预览_如何添加,删除和重新排列PowerPoint幻灯片
查看>>
您的Mac正在High Sierra中跟踪您的位置,这就是原因(以及如何禁用它)
查看>>
在Windows 7下最大限度地发挥多显示器的魔力
查看>>
如何使Ubuntu中的Gnome面板完全透明
查看>>
电子修补程序入门:购物清单
查看>>
chrome插件 备份书签_如何在本地备份和还原您的Chrome书签
查看>>
在Firefox的“关于”页面上找到隐藏功能和复活节彩蛋
查看>>
word中将空格替换为_如何在Word 2010中将英寸更改为厘米
查看>>
如何在Google文档中创建连字符,连字符和Em连字符
查看>>