SQL Server查询结果在40 GB数据库上的速度非常慢。可能会为每个LIKE语句调用
#customers-list {
width: 450px;
margin-left: -160px;
padding: 10px;
background-color: #e2e2e2;
overflow: hidden;
position: absolute;
z-index: 999;
}
函数来解压缩数据(这对性能不利)。
我的想法是用于数据解压缩的调用函数每行仅一次,然后将值保存到变量fn_decompress
并进行比较。
@decompData
我希望获得更好的性能的想法是:
SELECT ID, CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) AS Data
FROM dbo.ApplLogG2MessagesDataXML
WHERE (CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%alfa@gmail.com%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%mitcherl@better.com%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%mismatch@woobie.net%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%kopii@lerhard.info%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%metablock@gmail.com%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%peter@och.fr%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%info@lepit.de%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%nimrod@gmail.com%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%janine.boecher@gmail.cz%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%lipican@ninestor.eu%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%lejby.fejby@auto.it%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%kamil@senemil.cz%' OR
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) LIKE '%mikahekinen@word.buz%')
答案 0 :(得分:0)
重点是您使用CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX))
14次。只需在子选择中声明一次,然后在where条件中使用别名即可。
喜欢:
SELECT * FROM (
SELECT ID, CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX)) AS Data
FROM dbo.ApplLogG2MessagesDataXML
) as innerTable
WHERE (
`Data` LIKE '%alfa@gmail.com%' OR
`Data` LIKE '%mitcherl@better.com%' OR
`Data` LIKE '%mismatch@woobie.net%' OR
`Data` LIKE '%kopii@lerhard.info%' OR
`Data` LIKE '%metablock@gmail.com%' OR
`Data` LIKE '%peter@och.fr%' OR
`Data` LIKE '%info@lepit.de%' OR
`Data` LIKE '%nimrod@gmail.com%' OR
`Data` LIKE '%janine.boecher@gmail.cz%' OR
`Data` LIKE '%lipican@ninestor.eu%' OR
`Data` LIKE '%lejby.fejby@auto.it%' OR
`Data` LIKE '%kamil@senemil.cz%' OR
`Data` LIKE '%mikahekinen@word.buz%'
)
CAST(dbo.fn_decompress(dbo.ApplLogG2MessagesDataXML.Data) AS nvarchar(MAX))
造成14倍的问题是您重新计算了14次相同的数据。因此,您的系统需要计算出40GB容量的14倍。那不是真正的表现。