首页 MsSql sql-server – ON与WHERE的索引性能

sql-server – ON与WHERE的索引性能

我有两张桌子 @T1 TABLE( Id INT, Date DATETIME)@T2 TABLE( Id INT, Date DATETIME) 这些表在(Id,Date)上有非聚集索引 我加入了这些表格 SELECT *FROM T1 AS t1INNER JOIN T2 AS t2ON t1.Id = t2.IdWHERE

我有两张桌子

@T1 TABLE
(
    Id INT,Date DATETIME
)

@T2 TABLE
(
    Id INT,Date DATETIME
)

这些表在(Id,Date)上有非聚集索引

我加入了这些表格

SELECT *
FROM T1 AS t1
INNER JOIN T2 AS t2
ON 
    t1.Id = t2.Id
WHERE 
    t1.Date <= GETDATE()
    AND
    t2.Date <= GETDATE()

这也可以写成

SELECT *
FROM T1 AS t1
INNER JOIN T2 AS t2
ON 
    t1.Id = t2.Id
    AND
    t1.Date <= GETDATE()
    AND
    t2.Date <= GETDATE()

我的问题是,这两个查询中哪一个提供了更好的性能,为什么?或者他们是平等的?

解决方法

表现将是相同的.优化器将识别这一点并创建相同的计划.

另一方面,我不会说他们是平等的.问题的第一种形式更具可读性和普遍预期.

对于使用我手边的一些表的示例,无论我如何编写查询,您都可以看到执行计划完全相同.

您应该能够确定自己的表和数据集的查询计划,以便您可以看到在您的情况下会发生什么.

SELECT * FROM salestable,custtable 
WHERE salestable.custaccount = custtable.accountnum 
AND salestable.dataareaid = custtable.dataareaid

SELECT * FROM salestable 
JOIN  custtable 
ON salestable.custaccount = custtable.accountnum 
AND salestable.dataareaid = custtable.dataareaid

SELECT * FROM salestable JOIN custtable 
ON salestable.custaccount = custtable.accountnum 
WHERE salestable.dataareaid = custtable.dataareaid

给出了这些执行计划

本文来自网络,不代表青岛站长网立场。转载请注明出处: https://www.0532zz.com/html/shujuku/mssql/20200801/7692.html
上一篇
下一篇

作者: dawei

【声明】:青岛站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐

返回顶部