【发布时间】:2011-06-29 10:44:19
【问题描述】:
我目前正在使用一个相对较大的 SQL Server 2000 数据库。它的大小为 80 GB,拥有数百万条记录。
我目前需要返回一个名称列表,其中至少包含一系列非法字符中的一个。非法字符只是指客户定义的任意字符列表。在下面的示例中,我使用问号、分号、句点和逗号作为非法字符列表。
我最初想做一个与正则表达式一起工作的 CLR 函数,但由于它是 SQL Server 2000,我想这是不可能的。
目前我已经这样做了:
select x from users
where
columnToBeSearched like '%?%' OR
columnToBeSearched like '%;%' OR
columnToBeSearched like '%.%' OR
columnToBeSearched like '%,%' OR
otherColumnToBeSearched like '%?%' OR
otherColumnToBeSearched like '%;%' OR
otherColumnToBeSearched like '%.%' OR
otherColumnToBeSearched like '%,%'
现在,我无论如何都不是 SQL 专家,但我感觉上面的查询效率很低。在包含数百万条记录的表中执行 8 次多通配符搜索,似乎会严重降低系统速度。虽然它似乎在测试服务器上运行良好,但我得到了“这一定是完全错误的”的感觉。
由于我最终需要在现场生产服务器上执行此脚本,我希望能达到良好的性能,以免阻塞系统。稍后可能需要扩展该脚本以包含更多非法字符,但这不太可能。
总结一下:我的目标是获取一个记录列表,其中两列中的任何一列都包含客户定义的“非法字符”。该数据库是实时且庞大的,因此我想要一种更有效的方法,因为我相信上述查询会非常慢。
谁能告诉我实现结果的最佳方法?谢谢!
/莫腾
【问题讨论】:
-
您只需要运行一次查询吗?或者这是您需要反复做的事情?
-
实际上我并不完全确定。它很可能最多运行一次。一周,甚至可能是一次性手术。
标签: sql sql-server tsql sql-server-2000