【发布时间】:2010-04-22 00:59:45
【问题描述】:
我有两个数据库。第一个数据库有 CallsRecords 表,第二个数据库有 Contacts 表,两者都在 SQL Server 2005 上。
以下是两张表的示例。
Contact table has 1,50,000 records
CallsRecords has 75,000 records
Indexes on CallsRecords:
CallFrom
CallTo
PickUP
Indexes on Contacts:
PhoneNumber
alt text http://img688.imageshack.us/img688/8422/calls.png
我正在使用此查询来查找匹配项,但需要超过 7 分钟。
SELECT *
FROM CallsRecords r INNER JOIN Contact c ON r.CallFrom = c.PhoneNumber
OR r.CallTo = c.PhoneNumber OR r.PickUp = c.PhoneNumber
在估计的执行计划内连接成本 95%
任何优化它的帮助。
【问题讨论】:
-
几千条记录不是很多!
-
这些表上有哪些索引?
-
@Mitch Wheat 请看我的编辑。
-
执行计划会很有用,但您可以尝试将其分成三个 SELECT - 每个 CallsRecords 列一个 - 使用 UNION 将它们连接起来。
-
运行:
set showplan_xml on然后你的查询,在这里发布输出。
标签: sql sql-server sql-server-2005 tsql