假设您想从一个表中选择在另一个表中有对应行的所有行(另一个表中的数据并不重要,重要的是存在对应的行)。根据我对DB2的了解,当使用EXISTS子句编写相关查询而不是内部连接时,这种查询的性能会更好。SQL Server也是如此吗?或者这不会有任何不同?
发布于 2009-03-09 14:52:12
我刚刚运行了一个测试查询,这两个语句以完全相同的执行计划结束。当然,对于任何性能问题,我建议在您自己的环境中运行测试;使用SQL server Management Studio很容易(如果您运行的是2000,则可以使用SQL Query Analyzer )。只需在查询窗口中键入这两个语句,选择Query|Include Actual query Plan。然后运行查询。转到results选项卡,您可以很容易地看到计划是什么,以及哪个计划的成本更高。
发布于 2009-03-09 14:47:42
奇怪的是:对我来说,更自然的做法是先把它们写成一个相关的查询,在这一点上,我必须返回并重构才能使用连接,因为根据我的经验,sql server优化器更有可能做到这一点。
但别把我当回事。尽管我在这里有26K的代表,并且是当前仅有的两个特定于sql主题的徽章之一,但实际上我在sql知识方面相当初级(都是关于卷!; );当然,我不是DBA。在实践中,您当然需要分析每个方法以衡量其实际性能。我希望优化器能够识别出您所请求的内容,并以最佳方式处理这两个查询,但只有在检查之后,您才会知道。
发布于 2009-03-09 15:41:43
正如每个人都注意到的,这一切都归结于优化器。我建议以您觉得更自然的方式编写它,然后确保优化器可以找出最有效的查询计划(收集统计数据、创建索引等)。SQL Server优化器总体上是相当不错的,只要您为它提供了需要使用的信息。
https://stackoverflow.com/questions/626481
复制相似问题