我的sql server 2005数据库有一些问题。我有一个带有订单行的表,每一行都有一个名为NTEXTXmlData字段。我想计算所有没有存储信息的字段。我正在使用以下查询:

SELECT Count(*) FROM [OrderLine] WITH(NOLOCK)
WHERE [XmlData] NOT LIKE '' AND [XmlData] IS NOT NULL

这个表有230.314条记录,这个计数查询需要几分钟。你们中有人知道如何提高表现吗?
注意:我不能将列的类型更改为nvarchar(max)类型。诺洛克是一个同事的小费。
我期待一些提示和解释。

最佳答案

为了避免昂贵的lob读取,将[XmlData] NOT LIKE ''替换为DATALENGTH([XmlData])>0-DATALENGTH不需要读取每行的lob值。
另外,正如其他人所建议的:如果可能的话,使用nvarchar(max)而不是ntext。

10-08 13:12