weixin_45475794 2023-09-28 15:56 采纳率: 0%
浏览 4

DM组合索引不生效,order by中的两个字段设置了组合索引但不生效

最近做MYSQL迁移DM项目遇到一个问题,有一个大表,其中一个查询sql的order by字段是publish_date和up_date,执行sql的时候他们两个的组合索引没有生效,导致排序占用了很大的资源,降低了查询效率。
我查了查网上,说是where条件中没有这两个字段导致的,然后我就尝试着在where中加上了这两个字段,但是只有限制他们等于某值的时候才会生效,可是这不符合业务了,业务没有限制日期的需要。然后又试着改成了<'2099-12-20'这种条件,组合索引又不生效了,只生效了up_date字段自己的一个普通索引。
大家有没有遇到过这个问题?这种该怎么解决啊?

  • 写回答

1条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2023-09-29 12:29
    关注

    该回复引自强大而免费的微信小程序:皆我百晓生。


    遇到组合索引不生效的问题,可以考虑以下几种解决方案:

    1. 优化查询语句:首先,确保查询语句中的 WHERE 子句使用了组合索引的前缀片段。例如,如果组合索引是(publish_date,up_date),那么 WHERE 子句中应该至少包含 publish_date 的条件。这样可以最大程度地利用索引。另外,可以考虑分解复杂的查询语句,将其拆分成多个简单的查询语句,以减轻排序操作的负担。

    2. 调整索引顺序:如果组合索引的顺序不正确,可能会影响索引的使用效果。尝试调整组合索引的顺序,将最常用的字段放在前面。例如,如果 up_date 的选择性更高,可以考虑将组合索引改为(up_date,publish_date)。

    3. 使用覆盖索引:如果查询只需要返回组合索引中的字段,并不需要访问表中的其他字段,可以考虑创建覆盖索引。覆盖索引将结果直接存储在索引中,减少了对表的访问,提高查询性能。

    4. 分区表:如果表的数据量非常大,可以考虑使用分区表来提高查询性能。按照日期范围进行分区,可以加速在特定日期范围内的查询。

    5. 数据库优化配置:查看数据库配置是否合理,包括缓存大小、查询缓存开启情况等,合理的配置可以提高数据库的整体性能。

    请注意,优化方案的效果可能因数据库的版本和实际数据情况而有所差异,建议在实施之前在开发环境中进行测试和评估。如果问题仍然存在,可以考虑咨询专业的数据库管理员或开发人员进行进一步的分析和优化。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月28日

悬赏问题

  • ¥15 问题遇到的现象和发生背景 360导航页面千次ip是20元,但是我们是刷量的 超过100ip就不算量了,假量超过100就不算了 这是什么逻辑呢 有没有人能懂的 1000元红包感谢费
  • ¥30 计算机硬件实验报告寻代
  • ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
  • ¥15 用C语言判断命题逻辑关系
  • ¥15 原子操作+O3编译,程序挂住
  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘