为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8.1
【操作系统】:鲲鹏
【CPU】:麒麟
【问题描述】*:
SELECT *
FROM "hccadsyqk"
WHERE "hccadsyqk"."permissionsCode" = 'C701-E907-0000-0100-BA7E-B4A2-21DE-0100'
AND "hccadsyqk"."softFactory" = 'hccad'
AND "hccadsyqk"."isDeleted" = 0
ORDER BY "hccadsyqk"."concurrentNum" DESC,
"hccadsyqk"."statisticalTime" DESC limit 1
sql 如上执行计划如下:
索引如下:
问题1: 这个一定要concurrentNum 和 statisticalTime的排序为倒叙,它的执行计划 才会不进行所有匹配数据的回表 在排序的操作。按照个人理解,不管升序还是降序,索引中存在无非是从前找还是从后找的问题,为啥一定要索引字段排序规则和查询sql的排序规则一致呀?
问题2:如果业务想升序排时咋整呢?难道在创建一个相同的索引,只是后2个字段的排序规则不同?

问题1:并不能简单的从前和从后,因为你这个是组合索引,其中几个列的存储顺序其实在整个索引数据中是散列的,具体可以参考这篇文章里面的部分介绍:https://eco.dameng.com/community/article/39147fae89c9ffb5485c8d61567bd680

问题2:如果是组合索引中列的顺序,那确实只能创建不同排序的索引来满足不同业务需要。