sql:使用许多条件优化查询

时间:2017-03-29 16:21:30

标签: sql-server query-optimization patindex

我有这个sql查询:

SELECT
    [Id],
    [Content]    
FROM 
    [MyTable] with (nolock)
where
    Content is not null
    and (PATINDEX('%"number" : "[0-9]%', Content) > 0
         or PATINDEX('%"number":"[0-9]%', Content) > 0
         or PATINDEX('%"number" :"[0-9]%', Content) > 0
         or PATINDEX('%"number": "[0-9]%', Content) > 0
         --del
         or PATINDEX('%"del":"[0-9]%', Content) > 0
         or PATINDEX('%"del":"[0-9]%', Content) > 0
         or PATINDEX('%"del":"[0-9]%', Content) > 0
         or PATINDEX('%"del":"[0-9]%', Content) > 0
)

在我的服务器上,清除缓存后,返回大约400行需要两分钟以上,可能是因为or有很多条件。

我已经创建了这种方式的查询,因为Content列中“number”字符串可能在“:”和“number”字符串或下一个数字之间有空格。< / p>

有没有办法减少or条件?

1 个答案:

答案 0 :(得分:1)

试试吧

SELECT
    [Id],
    [Content]    
FROM 
    [MyTable] with (nolock)
where
    Content is not null
    and (PATINDEX('%"number":"[0-9]%', replace(Content,' ','')) > 0
         or PATINDEX('%"del":"[0-9]%', replace(Content,' ','')) > 0)

您也可以删除Content is not null部分