当前位置: 首页 > news >正文

兴义之窗网站怎么做找推网

兴义之窗网站怎么做,找推网,wordpress backwpup,上海传媒公司名字文章目录 前言问题描述原因分析总结 前言 今天遇到了一个有意思的问题,线上数据库 CPU 出现了偶发的抖动。定位到原因是一条查询语句偶发变慢造成的,随后通过调整表中的索引解决。 问题描述 下方是脱敏后的 SQL 语句: select oss_path f…

文章目录

    • 前言
    • 问题描述
    • 原因分析
    • 总结

前言

今天遇到了一个有意思的问题,线上数据库 CPU 出现了偶发的抖动。定位到原因是一条查询语句偶发变慢造成的,随后通过调整表中的索引解决。

问题描述

下方是脱敏后的 SQL 语句:

select oss_path 
from table_name 
where status = 2 and enabled = 1 and user_id = 12324215

表中除了主键外,还有两个索引,分别是 status 字段的二级索引和 user_id 字段的中二级索引。经过观察这类 SQL 的执行计划有两种:

  • SQL 偶发会使用 index_merge 通过使用两个字段的索引过滤,然后取交集,再返回数据,耗时 120 秒。
  • SQL 会使用 user_id 字段的索引进行过滤,耗时 50ms。

SQL 的执行耗时差别非常大,究竟是为何呢?见下文分析。

原因分析

SQL 变慢的原因就是使用了 index_merge,可以通过 explain format = json 查看执行计划,access_type = index_merge 表示使用了两个索引。index_merge 也叫索引合并是优化器想利用两个索引,取交集或并集操作后,再回表获取数据。从而优化一些 SQL 表中字段有多个 and 或者 or 的查询,刚好这些 and 和 or 字段上有索引。

index_merge 分三种类型:

  • intersect:多个索引的条件使用 AND
  • union:多个索引的条件使用 OR
  • sort_union:多个索引的条件使用 OR

如何确认是哪种类型的呢?explain format = json 中的 key 字段中 intersect(idx_user_id, idx_status) 会显示 merge 的索引和类型。

在上方案例中的 SQL 使用的是 intersect 类型的 merge,执行过程大致是:

  1. 从 idx_user_id 索引中读取满足条件的数据。
  2. 从 idx_status 索引中读取满足条件的数据。
  3. 将 步骤 1、步骤 2 获取到的记录求交集。
  4. 根据步骤3 的得到的 rowid 回表获取数据。
  5. 判断记录是否满足其它额外的条件。

相信看到这里,就知道为什么两种执行计划差别这么大的原因了。idx_status 字段的索引选择性非常差,通过该字段过滤后的结果集有 80w 行,而 idx_user_id 字段选择性非常好,过滤后只有 5 行。通过 idx_status 字段过滤一次数据就需要几十秒的时间,再加上取交集的时间,耗费直接 100 多秒了。属于优化器的缺陷,也反映了表中的索引建立的不规范,因为 status 字段的选择性非常差,因为它只有 0,1,2,3 四种取值,当然也会有特殊情况。

优化的方法也非常简单,既然优化器走了 intersect(idx_user_id, idx_status) 我们就创建一个 user_id、status 的复合索引,创建完成后 idx_user_id 索引就变成了冗余索引,需要在复合索引创建完成后,删除掉。

索引调整完成后,就再也没有出现这类查询偶发变慢的情况了。

另外,值得注意的是,使用了 index_merge 的 SQL,慢日志中记录的扫描行数是取交集时的扫描行数,这部分扫描行数可能会很小,容易造成干扰,为什么只扫描了 9w 行,反而花费了几百秒。我们只需要把 index_merge 中的索引字段分别拆出来执行一遍,就知道慢在哪里了。

总结

优化器通过某种机制检测到 index_merge 能带来性能提升,某些情况下不会带来提升,反而会耗费更长的时间,属于优化器的缺陷,可以通过调整表中的索引来解决。

http://www.yidumall.com/news/64610.html

相关文章:

  • 图书管理系统网站开发毕业论文广州seo排名收费
  • php做手机网站网站底部友情链接
  • 做企业形象网站seo精准培训课程
  • 办公室装修设计及报价企业网站搜索优化网络推广
  • 兼职做网站挣钱么兰州seo实战优化
  • 网站设计上市公司深圳网络营销推广招聘网
  • 金华企业自助建站系统百度站长工具官网
  • 网站在只有域名了环球网广东疫情最新消息
  • 公司网站能自己做二维码代运营公司排行榜
  • 东城区住房和城市建设委员会网站长沙网络营销外包哪家好
  • 深圳营销型网站建设服务营销助手
  • 网站漂浮客服代码百度网址大全 旧版本
  • 网站独立ip有什么好处百度竞价账户
  • asp.net jsp 网站开发免费自助建站
  • 网站建设费交文化事业关键词在线优化
  • 网站建设优秀网站建设新郑网络推广公司
  • 社交网站 cms关键词优化简易
  • 建设银行储蓄卡申请网站爱网站查询挖掘工具
  • 公司网站与营销网站区别怎么制作网站教程手机
  • 科普文章在那个网站做北京网站快速排名优化
  • 成都淮洲新城建设投资有限公司网站pageadmin建站系统
  • 有谁知道做外挂的网站叫蜗牛百度怎么创建自己的网站
  • 做门户网站用什么系统好北京营销推广网站建设
  • 商务网站建设内容响应式网站模板的特点
  • WordPress用ck插件温州seo排名优化
  • 市场调研公司是做什么的搜索引擎优化的方法包括
  • 网站封面制作100个常用的关键词
  • 做全国社保代理的网站电商网站建设价格
  • 做分销网站系统网站排名靠前方法
  • 做网站设计的有些什么职位百度知道