我有一个SQL查询需要几个小时才能运行。基本上,我期待在我们的“页面”表格中找到具有特殊字符的文档(PDF)。我在PDFFile表中找到这些PDF。执行第一个AND子句将在16秒内返回。添加第二个子句使SQL花费3小时。试图找出我做错了什么。任何帮助是极大的赞赏。SQL命令运行缓慢。需要帮助识别缓慢
查询:
select b.bookletname, b.trackingID, b.[version], s.name
from page p
inner join section s on s.id = p.sectionid
inner join booklet b on b.id = s.bookletid
INNER JOIN [user] u ON b.CreatedBy = u.id
INNER JOIN client c ON c.id = u.clientID
WHERE u.clientID = 2
AND p.[filename] IN (
SELECT DISTINCT pdf.[FileName]
FROM PDFFile pdf
WHERE pdf.fileName LIKE '%\<%' ESCAPE '\'
OR pdf.fileName LIKE '%\>%' ESCAPE '\'
OR pdf.fileName LIKE '%\"%' ESCAPE '\'
OR pdf.fileName LIKE '%\%%' ESCAPE '\'
OR pdf.fileName LIKE '%''%' ESCAPE '\'
OR pdf.fileName LIKE '%\*%' ESCAPE '\'
OR pdf.fileName LIKE '%\+%' ESCAPE '\'
OR pdf.fileName LIKE '%\\%' ESCAPE '\'
OR pdf.fileName LIKE '%\/%' ESCAPE '\'
OR pdf.fileName LIKE '%\:%' ESCAPE '\'
OR pdf.fileName LIKE '%\?%' ESCAPE '\'
OR pdf.fileName LIKE '%\[%' ESCAPE '\'
OR pdf.fileName LIKE '%\]%' ESCAPE '\'
OR pdf.fileName LIKE '%\|%' ESCAPE '\'
)
OR p.[PDF_File_Name] IN (
SELECT DISTINCT pdf.[FileName]
FROM PDFFile pdf
WHERE pdf.fileName LIKE '%\<%' ESCAPE '\'
OR pdf.fileName LIKE '%\>%' ESCAPE '\'
OR pdf.fileName LIKE '%\"%' ESCAPE '\'
OR pdf.fileName LIKE '%\%%' ESCAPE '\'
OR pdf.fileName LIKE '%''%' ESCAPE '\'
OR pdf.fileName LIKE '%\*%' ESCAPE '\'
OR pdf.fileName LIKE '%\+%' ESCAPE '\'
OR pdf.fileName LIKE '%\\%' ESCAPE '\'
OR pdf.fileName LIKE '%\/%' ESCAPE '\'
OR pdf.fileName LIKE '%\:%' ESCAPE '\'
OR pdf.fileName LIKE '%\?%' ESCAPE '\'
OR pdf.fileName LIKE '%\[%' ESCAPE '\'
OR pdf.fileName LIKE '%\]%' ESCAPE '\'
OR pdf.fileName LIKE '%\|%' ESCAPE '\'
)
OR p.[PDFName] IN (
SELECT DISTINCT pdf.[FileName]
FROM PDFFile pdf
WHERE pdf.fileName LIKE '%\<%' ESCAPE '\'
OR pdf.fileName LIKE '%\>%' ESCAPE '\'
OR pdf.fileName LIKE '%\"%' ESCAPE '\'
OR pdf.fileName LIKE '%\%%' ESCAPE '\'
OR pdf.fileName LIKE '%''%' ESCAPE '\'
OR pdf.fileName LIKE '%\*%' ESCAPE '\'
OR pdf.fileName LIKE '%\+%' ESCAPE '\'
OR pdf.fileName LIKE '%\\%' ESCAPE '\'
OR pdf.fileName LIKE '%\/%' ESCAPE '\'
OR pdf.fileName LIKE '%\:%' ESCAPE '\'
OR pdf.fileName LIKE '%\?%' ESCAPE '\'
OR pdf.fileName LIKE '%\[%' ESCAPE '\'
OR pdf.fileName LIKE '%\]%' ESCAPE '\'
OR pdf.fileName LIKE '%\|%' ESCAPE '\'
)
有那么多'LIKE',这怎么可能不慢呢? – Lamak 2014-11-06 16:49:43
为什么您的PDF表格有两个单独的文件列?如果其中一个是空的,你可以使用'COALESCE()'吗? – Kevin 2014-11-06 16:56:11
@Lamak:特别是用'LIKE'和一个前导'%' - >确保**没有索引**可以使用! – 2014-11-06 17:03:48