索引列顺序导致的性能问题

今天和大家分享一个很有意思的例子,关于索引列的顺序导致的性能问题。 发现数据库的性能比较差,CPU消耗很高,抓了一个awr,发现瓶颈在sql上,top 1的sql是一个很简单的update语句,没有复杂的条件和表关联。 竟然导致CPU 99% 抓了一个explain plan 的report和自己的理解,先简单说明一下表的情况。 表,TEST_NOTIF_REQ_LOG, 主键基于两个列(partition_key,NOTIFICATION_SEQ_NO),执行计划,update语句,还有数据分布大体如下,可以看到cpu消耗是很高的,走了全表扫描,数据量大概几百万条。

图1.

最后我随机取了两列的值,测试的数据基于这两条数据。 为了模拟,我把数据,staticstics导出到一个测试库里,可以看到查询单条数据的逻辑读还是很高的,没有走索引。

然后加了条件,partition_key, 立刻走了索引,cpu指标一下子到了1,逻辑读也很低,这是我要努力的方向。

删除原来的索引,然后重新索引,按照指定的顺序来建立索引,立马进行验证,但失望的是性能指标并没有任何改变。

重新建立索引,试着用create unique index的方式来建立索引,终于发现问题。

问题基本找到了,然后建立主键,关联产生索引来看看,发现达到了预期的效果。逻辑读很低,cpu消耗也很低。

有的朋友可能说,是不是由于索引没有关联主键导致的这样的问题。如果建立索引还是按照PARTITION_KEY,NOTIFICATION_SEQ_NO

性能应该没有什么差别

测试结果如下

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-03-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

MySQL中的反连接(r12笔记第45天)

关于Oracle的半连接,反连接,我一直认为这是一个能讲很长时间的话题,所以在我的新书《Oracle DBA工作笔记》中讲性能优化的时候,我花了不少的笔墨做...

2555
来自专栏猿人谷

【性能提升神器】Covering Indexes

可能有小伙伴会问,Covering Indexes到底是什么神器呢?它又是如何来提升性能的呢?接下来我会用最通俗易懂的语言来进行介绍,毕竟不是每个程序猿都要像D...

401
来自专栏杨建荣的学习笔记

简单对比MySQL和Oracle中的一个sql解析细节 (r5笔记第40天)

SQL的语法解析器是一个很强大的内置工具集,里面会涉及到很多的编译原理的相关知识,语法分析,词法分析。。一大堆看起来很理论的东东,不过看起来枯燥之余,它们的价值...

3298
来自专栏美团技术团队

SQL解析在美团点评中的应用

1413
来自专栏全栈工程师成长之路

深入浅出后端开发(MySQL篇)

35318
来自专栏杨建荣的学习笔记

关于MySQL学习大纲(r5笔记第26天)

首先需要自我反省,因为自己圈内朋友中MySQL大牛太多,自己就先班门弄斧了,莫见怪:) 前段时间很荣幸通过了YEP(Young Expert Program)的...

4038
来自专栏IT派

SQL的巨大飞跃:MySQL 8.0发布

“你仍在使用SQL-92吗?”是我在“新SQL”演讲中的开篇问题。在我提出这个问题后,竟然有大部分观众坦承仍在使用25年前的技术。而如果我问谁还在使用Windo...

884
来自专栏杨建荣的学习笔记

DBMS_STATS收集统计信息的问题及解决

收集数据库的统计信息是dba工作的一部分,如果在数据快速增长的库上,统计信息如果收集的频率太慢,会对执行计划有一定的影响。 而对于逐渐客户饱和的系统来说,统计信...

3174
来自专栏杨建荣的学习笔记

MySQL反连接的优化总结(r10笔记第51天)

今天同事有一个环境发现一条语句执行时间很长,感到非常奇怪。刚好有些时间,就抽空琢磨了下这个问题。 总体来看这个环境还是相对比较繁忙的,线程大概是200多个。 #...

3037
来自专栏维C果糖

史上最简单的 MySQL 教程(十九)「范式」

在数据存储之后,凡是能够通过关系寻找出来的数据,坚决不再重复存储,范式的终极目标是减少数据冗余。

3928

扫描关注云+社区