SQL查询不同LIMIT参数取值导致排序结果不一致问题咨询
问题原因分析
- 核心问题出在
ORDER BY子句的排序规则不唯一。你当前仅以rgti_reference单个字段作为排序依据,当多条数据的rgti_reference值完全相同时(包括同为NULL的情况),数据库没有定义这些等值数据的固定排序优先级,返回顺序完全取决于查询执行计划、数据物理存储结构、索引命中情况等底层因素,不具备稳定性。 - 当LIMIT参数不同时,数据库可能选择不同的执行路径:比如LIMIT 10时可能采用快速扫描取前10条的执行计划,LIMIT 20时可能走全量排序后取前20条的计划,两种路径下对
rgti_reference等值的行的返回顺序会出现差异,最终表现为你看到的排序结果不一致。 - 修复方案:在
ORDER BY子句中补充一个全局唯一的字段作为兜底排序规则即可,比如主键id,修改后的排序规则如下:
补充唯一兜底排序字段后,排序规则完全确定,无论LIMIT取任何值,返回结果的排序都会保持一致。ORDER BY "acgti"."rgti_reference" ASC NULLS FIRST, "acgti"."id" ASC
内容的提问来源于stack exchange,提问作者Maxime B
相关产品推荐
相关产品推荐

