[英]SQL query execution order
如果我有这样的LINQ
查询:
query.OrderBy(e => e.Name).Where(e => e.Name.Contains("Test")).Take(10);
ORDERBY
、 WHERE
和TAKE
的执行顺序是什么。
ORDERBY
是仅对匹配搜索条件的记录执行还是对整个表执行?TAKE 10 records
,还是在获得 10 条符合条件的记录时停止搜索?linq 代码的背后是一个 SQL 查询。 在 SQL 中,您无法选择查询的执行方式。 这是一种描述性语言,您可以在其中告诉数据库您想要什么结果,然后让它找出最有效的方法。
我们有一些思维路径可以理解 SQL 代码(例如:首先执行from
子句,然后执行where
子句,然后group by
如果有的话),然后select
最后order by
) - 但数据库不一定遵循该模式. 执行计划通常构建为有向无环图,提供更大的灵活性。
它按此顺序发生 -
WHERE 谓词用于过滤结果,
THEN ORDER BY 排序和
THEN 10 from that,这恰好是 TOP 10 语法。
通过运行“包括实际执行计划”的查询,您可以很容易地看到它在 SQL 服务器中是如何执行的。
这是我用来演示的查询加上 output。 抱歉不得不使用 Ozar 的工具,因为在 SO 上获取图像可能很烦人。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.