/*
*问题描述:为什么在没有 ORDER BY 子句的情况下无法保证 SELECT 语句所返回结果的顺序。
*解决思路:SQL Server Enterprise 中,高级扫描功能
*/
-------------------------解释------------------------------------
--在 SQL Server Enterprise 中,高级扫描功能使得多项任务可以共享完全表扫描。它可以这么理解:
1.你执行一个T-SQL语句,扫描整个A表,在执行扫描一段时间后检测到其他执行计划也在扫描A表,这个时候为另外一个执行标识当时的行,并且同步加入到第一个执行计划中.
这个时候每一次读取一页,并将每一页的行传递给这两个执行计划。此操作将一直持续到该表的结尾处。
2.此时,第一个执行计划已有完整的扫描结果,而第二个执行计划仍必须检索在它加入正在进行的扫描之前读取的数据页。
然后,第二个执行计划中的扫描将绕回到表的第一个数据页,并从这里向前扫描到它加入第一个扫描时所处的位置。可以按这种方式组合任意数量的扫描。数据库引擎将循环遍历数据页,直到完成所有扫描。
这种机制也称为“走马灯式扫描”
------------------------------------------------------------------
通过这个你就不难理解了(假如A表有5000行) 当用户1在扫描你的A表到3000行的时候,用户2开始扫描A表,而且是从3001行开始扫描.
当你的用户1扫描完的时候,用户2又回到第一行开始扫描.这个时候 我们用户2返回的数据是(后2000行的数据+前3000行的数据,而不是从第1行到5000行)
【小小问题集锦5之---为什么在没有 ORDER BY 子句的情况下无法保证 SELECT 语句所返回结果的顺序。】
最新推荐文章于 2021-02-28 04:38:32 发布