首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL Server连接性能

SQL Server连接性能
EN

Stack Overflow用户
提问于 2013-06-28 11:03:47
回答 2查看 125关注 0票数 0

我在SQL Server连接中遇到了性能问题,因为SQL Server连接存在多列比较。

代码语言:javascript
复制
SELECT T1.* FROM T1, T2
WHERE T1.LASTNAME = T2.LASTNAME AND
T1.FIRSTNAME = T2.FIRSTNAME AND
T1.MIDDLENAME = T2.MIDDLENAME AND
DAY(T1.DoB) = T2.DOBDay AND
MONTH(T1.DoB) = T2.DOBMonth

这些表中的每个表都有超过20,000条记录,这确实会导致性能问题。我运行了它,它花费了超过6分钟,所以我取消了它!

有没有办法提高这条语句的性能?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-28 13:01:08

在此之前,您必须在两个表上创建下面的非集群索引。

代码语言:javascript
复制
CREATE NONCLUSTERED INDEX IX_First_Middle_T2  ON T2 (FIRSTNAME,MIDDLENAME); 

现在运行下面的查询

代码语言:javascript
复制
SELECT T1.*,DAY(T1.DOB) as DOBDay, MONTH(T1.DOB) as DOBMonth INTO #T1
CREATE NONCLUSTERED INDEX IX_First_Middle_T1  ON #T1 (FIRSTNAME,MIDDLENAME); 

SELECT T1.*
FROM #T1 T1
JOIN T2
ON T1.LASTNAME     = T2.LASTNAME
and T1.FIRSTNAME   = T2.FIRSTNAME
and T1.MIDDLENAME  = T2.MIDDLENAME
and T1.DOBDay      = T2.DOBDay
and T1.DOBMonth    = T2.DOBMonth

上面的查询给出了两个额外的列,其中包含month和date,而不是T1。*用列名替换它。

票数 0
EN

Stack Overflow用户

发布于 2013-06-28 11:09:29

因为您只需要来自T1表的数据,所以可以使用left join或exists子句。

代码语言:javascript
复制
  select T1.* 
  from T1
  where
      exists (
                  select 1
                  from T2
                  where
                     T1.LASTNAME = T2.LASTNAME
                     and T1.FIRSTNAME = T2.FIRSTNAME
                     and T1.MIDDLENAME = T2.MIDDLENAME
                     and DAY(T1.DoB) = T2.DOBDay
                     and MONTH(T1.DoB) = T2.DOBMonth
             )
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17356562

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档