我有一个名为account_info
的表。
当我运行select id from account_info limit 0, 10
时,结果如下。
但是当我运行select * from acccount_info limit 0, 10
时,结果如下(忽略其他列)。
为什么ID不同?
当我向这两个sql添加order by id
时,结果是相同的。似乎结果的顺序很重要。但我认为当没有order by id
时,select id from account_info limit 0, 10
和select * from account_info
共享相同的默认排序策略,结果应该相同。
有人可以解释原因吗?我的MySQL版本是5.7.14。
答案 0 :(得分:3)
没有"默认排序政策"因为排序总是需要一些(通常非常昂贵的)计算,所以如果你没有指定任何顺序,MySQL可以按照它认为最快/最便宜的方式自由地返回行。
当您仅查询id
时,您看到要排序的值的原因是,在这种情况下,MySQL只需要读取存储为(已排序)B树的主键。您可以通过查看查询执行计划来确认这一点 - 它应显示Using index
,其描述为:
仅使用表格检索列信息 索引树中的信息,无需进行额外的搜索 阅读实际的行。查询使用时可以使用此策略 只有属于单个索引的列。
当您查询*
时,MySQL必须遍历表格数据本身,可以按任何顺序存储。
请注意,上述说明并不保证结果排序。要重复:没有明确的ORDER BY
所有投注均不会返回数据。