Sql server 或者在WHERE语句中,事情会急剧放缓
我有以下查询查找与订单相关的客户。我在客户身上有一个遗留ID,因此我必须检查旧ID(遗留)和客户ID,从而检查or语句Sql server 或者在WHERE语句中,事情会急剧放缓,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我有以下查询查找与订单相关的客户。我在客户身上有一个遗留ID,因此我必须检查旧ID(遗留)和客户ID,从而检查or语句 SELECT c.Title, c.Name FROM productOrder po INNER JOIN Employee e ON po.BookedBy = e.ID CROSS APPLY ( SELECT TOP 1 * FROM Customer c WHERE(po.
SELECT
c.Title,
c.Name
FROM productOrder po
INNER JOIN Employee e ON po.BookedBy = e.ID
CROSS APPLY (
SELECT TOP 1 *
FROM Customer c
WHERE(po.CustID = c.OldID OR po.CustID = c.CustID)
) c
GROUP BY
c.CustomerId, c.Title, c.FirstName, c.LastName
如果我删除
或
语句,它在这两种情况下都可以正常运行。有一个关于客户id和旧版的索引。对于表customer
,您需要在列oldid
和custid
上创建单独的索引。如果您已经在custid
上建立了聚集索引,那么也可以在oldid
上添加索引:
CREATE INDEX customer_oldid_idx ON customer(oldid);
如果没有此索引,请在此子句中搜索oldid
:
WHERE (po.CustID = c.OldID OR po.CustID = c.CustID)
必须使用全表扫描,这将非常慢。对于表
customer
,您需要在列oldid
和custid
上创建单独的索引。如果您已经在custid
上建立了聚集索引,那么也可以在oldid
上添加索引:
CREATE INDEX customer_oldid_idx ON customer(oldid);
如果没有此索引,请在此子句中搜索oldid
:
WHERE (po.CustID = c.OldID OR po.CustID = c.CustID)
将必须使用全表扫描,这将非常慢。您在
customer.oldid
和customer.custid
上有单独的索引吗?没有,我有一个聚集索引为什么不更新productOrder
并用相应的新id:s替换旧id:s?假设旧id:s在客户中也是唯一的,这应该很容易。。。我缺少什么?您在customer.oldid
和customer.custid
上有单独的索引吗?没有,我有一个聚集索引为什么不更新productOrder
并用相应的新id:s替换旧id:s?假设旧id:s在客户中也是唯一的,这应该很容易。。。我错过了什么?