繁体   English   中英

为什么SQL查询的结果不会按照我期望的顺序返回?

[英]Why do results from a SQL query not come back in the order I expect?

如果将项目插入表中,然后我编写一个查询,例如select * from table ,为什么结果不符合我的预期?

可以使用语句中的“Order by”子句强制查询的顺序。 SQL数据库实际上并不了解您放入内容的顺序,或以给定顺序存储数据。 这意味着您需要告诉SQL您希望项目的顺序。例如:

Select * from Table
  order by column1 desc

想想就像将一些东西交给你的朋友一样 - 她将在以后为你提供所有这些东西,但她会在同一时间将它存放到某个地方。 当你不打算为其他东西腾出空间时,她可能会移动它,或者可能按照你给她的顺序将它移回去,但是你并没有告诉她要保持顺序,所以她没有。

数据库需要能够在后台移动,因此它们的构建方式本质上不知道任何顺序 - 当您将数据提供给数据库时需要知道顺序,以便您可以将其放回到数据库中。你想要的订单。 order子句允许SQL对数据强加一个顺序,但它不记得或者有一个单独的数据。

重要的一点 :即使SQL在没有order by语句的情况下以正确的顺序返回项目的最后100万次,也不能保证它会这样做。 即使表上存在聚簇索引,也不能保证按预期的顺序返回结果。 特别是当SQL版本发生更改时,未明确使用order by子句可能会破坏假定查询将按其所需顺序排列的程序!

期望按插入顺序得出结果是一种常见的误解。 即使使用聚簇索引,结果集也可能不符合预期。 强制执行订单的唯一方法是使用“order by”子句。 订单与预期不同的原因可能会有所不同。 查询可以并行执行,并且结果集可以合并,或者可以归因于查询优化计划,同时尽可能快地返回结果集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM