暂无图片
复合索引与单一索引
我来答
分享
Zoe
2024-12-19
复合索引与单一索引

基本情况:表数据13亿,按月分区、日期字段是单一索引。日期分布均匀
现sql查询条件用到 日期、机构代码、类型.查询结果客户代码和sum(金额),一共用到这5个字段

目前分析sql瓶颈在于:用的日期这个单一索引,查询返回结果基数大,再回表消耗大。

我的思路是减少基数。这种情况建索引哪种好?
1.新建复合索引:机构代码、日期
2.将原单一索引变成复合索引,日期、+机构代码
本表数据量大,用的地方多。已经有4个索引。其中日期的单一索引用到的特别多。

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
Zoe

我采取了1,新建复合索引:机构代码和日期。确实减小了返回基数,大大提高了效率。对系统中用到这张表的ddl操作sql,进行了监控,看是否有严重影响效率的sql。 优化后,原先前端查询从2分钟降到9秒。

暂无图片 评论
暂无图片 有用 1
打赏 0
Zoe
题主
2024-12-23
前端验证成功后,下午对表中数据进行了一系列操作后索引失效,SQL语句没变,执行计划走了原来的单一索引。优化器没有选择使基数更小的复合索引。分析可能导致此现象的原因
Thomas

我个人感觉,有些关键的信息要具体化。比如日常用这个SQL,where条件后筛出的记录大概是多少条,如果只筛出1000条,和筛出10万条,采取的策略就应该不一样。

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏