我刚刚对用于返回一些搜索结果的查询的 WHERE
子句进行了修改。
我开始于:
WHERE
(
CONTAINS(MD_Entity.Forename, @Forename)
AND CONTAINS(MD_Entity.Family_Name, @FamilyName)
)
AND
(
MD_Entity_Role.Role_Type = 2
OR MD_Entity.Do_Not_Transact = 1
)
并将其更改为:
WHERE
(
CONTAINS(MD_Entity.Forename, @Forename)
AND CONTAINS(MD_Entity.Family_Name, @FamilyName)
AND MD_Entity_Role.Role_Type = 2
)
OR
(
CONTAINS(MD_Entity.Family_Name, @Forename)
AND CONTAINS(MD_Entity.Family_Name, @FamilyName)
AND MD_Entity.Do_Not_Transact = 1
)
查询从立即返回结果变为花费一分钟左右的时间。
我不是 SQL
专家,所以我显然在这里犯了一些效率错误。首先,有人可以解释为什么效率下降如此之大,其次,是否有更快的方法来完成我在这里所做的事情?
最佳答案
对条件重新排序,第一个速度更快
WHERE
( 1 = 1
AND MD_Entity_Role.Role_Type = 2
AND CONTAINS(MD_Entity.Forename, @Forename)
AND CONTAINS(MD_Entity.Family_Name, @FamilyName)
)
OR
( 1 = 1
AND MD_Entity.Do_Not_Transact = 1
AND CONTAINS(MD_Entity.Family_Name, @Forename)
AND CONTAINS(MD_Entity.Family_Name, @FamilyName)
)
使用UNION
避免缓慢的OR
条件
WHERE
1 = 1
AND MD_Entity_Role.Role_Type = 2
AND CONTAINS(MD_Entity.Forename, @Forename)
AND CONTAINS(MD_Entity.Family_Name, @FamilyName)
UNION
WHERE
1 = 1
AND MD_Entity.Do_Not_Transact = 1
AND CONTAINS(MD_Entity.Family_Name, @Forename)
AND CONTAINS(MD_Entity.Family_Name, @FamilyName)
关于sql - CONTAINS 与条件逻辑组合时的效率问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30590721/