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

今天和大家分享一个很有意思的例子,关于索引列的顺序导致的性能问题。 发现数据库的性能比较差,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 条评论
登录 后参与评论

相关文章

来自专栏编程之路

学校报修管理系统设计

需求分析:学校报修类别有两种,常规报修和电教报修。教师提交报修填写报修单后,自动派单到维修人员,维修人员接单维修,维修后结束报修单,报修教师对维修人员进行评价。...

1263
来自专栏数据和云

杀手SQL- 一条关于 'Not in' SQL 的优化案例

编辑手记:在 DBA 所优化的数据库环境中,绝大多数性能问题其实是由于 SQL 编写不当导致的。SQL 的世界无奇不有,今天我们一起见识一条让你绝对想吐血的杀手...

3326
来自专栏架构师之路

MySQL的or/in/union与索引优化 | 架构师之路

本文缘起自《一分钟了解索引技巧》的作业题。 假设订单业务表结构为: order(oid, date, uid, status, money, time, …) ...

36411
来自专栏程序你好

互联网MySQL数据库应用潜规则

1072
来自专栏程序猿DD

一个不可思议的MySQL慢查分析与解决

前言 开发需要定期的删除表里一定时间以前的数据,SQL如下 mysql > delete from testtable WHERE biz_date <= '2...

3315
来自专栏企鹅号快讯

提升网站访问速度的 SQL 查询优化技巧

英文:Delicious Brains,翻译:开源中国 www.oschina.net/translate/sql-query-optimization ? 你...

20810
来自专栏后端之路

Mysql count(*) 大表优化

背景 目前数据稽计逻辑报表库存在大量数据 单表已经突破千万级。 在innodb引擎上目前count(*) 是通过实时查询 因此耗时比较多 比如 select ...

2907
来自专栏编程一生

预告片优化方案

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

持续近7个小时的索引扫描的查询优化分析 (r5笔记第44天)

昨天客户的DBA反映有一个数据抽取的任务持续了很长时间最后超时退出了,让我看看有什么地方可以调优一下。 找到了对应的日志,发现在一个大表抽取的时候,抽取持续了将...

4055
来自专栏FreeBuf

企业安全建设之路:端口扫描(下)

0x00、前言 在企业安全建设过程当中,我们也不断在思考,做一个什么样的端口扫描才能企业业务需求。同时,伴随着企业私有云、混合云以及公有云业务部署环境的不断变...

38210

扫码关注云+社区