未指定ORDER BY时,SQL查询返回的主键id顺序是否固定?
关于SQL查询结果行顺序的疑问
我执行了如下SQL查询:
select id from table_xx where name='aaa'
对应的表table_xx结构及数据如下:
| id | name |
|---|---|
| 1 | aaa |
| 2 | bbb |
| 3 | aaa |
注:id是主键(primary key)。
当我运行如下代码时:
result = execute_query(query) print(result[0][0])
请问该查询是否始终返回最小的id(即id=1)作为结果集中的第一行?还是存在返回id=3作为第一行的可能?
回答
存在返回id=3作为第一行的可能,不会始终返回id=1。
原因很明确:SQL标准里规定,只要查询语句没加ORDER BY子句,结果的行顺序就是未定义的。数据库会根据自身的执行计划、数据存储状态、优化策略等,以任意顺序返回符合条件的行。
哪怕id是主键,数据库底层基于主键建了索引,也不代表查询一定会按主键升序返回结果——优化器可能选择更高效的执行路径,导致结果顺序和主键顺序不一致。
如果想要确保始终拿到最小的id,必须在查询里显式指定排序规则,修改后的语句如下:
select id from table_xx where name='aaa' order by id asc
内容的提问来源于stack exchange,提问作者Mr.Cocococo
相关产品推荐
相关产品推荐

