【发布时间】:2012-03-01 03:47:12
【问题描述】:
我正在使用 Firebird 2.1,我需要一些帮助来优化此查询:(可能通过将 IN-s 替换为 JOINS 或其他方式来加快速度,因为它非常慢)
SELECT ClientID, ClientType, ClientName
FROM Clients
WHERE
(
AccessRights = 0 OR
OwnerUserID = :uid OR
(
AccessRights = 2 AND
ClientID IN (SELECT ClientID
FROM ClientRights
WHERE UserID = :uid)
)
)
AND ClientID IN (SELECT CC.ClientID
FROM CaseClients CC
WHERE CC.CaseID IN (SELECT DISTINCT CaseID
FROM TimeSheet
WHERE IsBilled = 0)
AND CC.ClientToBill = 1
AND (SELECT BillingType
FROM Cases
WHERE CaseID = CC.CaseID) = 2
);
谢谢!
【问题讨论】:
-
您是否已经为要查询的字段添加了索引以加快整个过程?
-
我不能代表火鸟,但我知道在某些实现中,使用 EXISTS 而不是 IN 更快。
-
我知道在 SQL Server 中,优化器在使用
AND谓词时通常比OR表现更好,有时可以通过将OR转换为逻辑上等效的AND来提高性能跨度>
标签: sql optimization join firebird firebird2.1