sql - 具有大量子句的 SQL 'LIKE' 语句的效率

标签 sql sql-server-2005 string performance search

我需要从包含多个值之一的文本字段中提取信息。 SQL 看起来像:

SELECT fieldname
FROM table
WHERE bigtextfield LIKE '%val1%'
   OR bigtextfield LIKE '%val2%'
   OR bigtextfield LIKE '%val3%'
   .
   .
   .
   OR bigtextfield LIKE '%valn%'

我的问题是:当值的数量接近数百甚至数千时,效率如何?有更好的方法吗?

一种解决方案是创建一个新的表/列,其中仅包含我所追求的值并执行以下操作:

SELECT fieldname
FROM othertable
WHERE value IN ('val1', 'val2', 'val3', ... 'valn')

我想这会更有效率,因为它只需要进行精确的字符串匹配。这样做的问题是要使该表保持最新需要大量工作。

顺便说一句,我使用的是 MS SQL Server 2005。

最佳答案

此功能已存在于大多数 SQL 引擎中,包括 MS SQL Server 2005。它称为全文索引;这里有一些资源:

关于sql - 具有大量子句的 SQL 'LIKE' 语句的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1772203/

相关文章:

c# - 如何从数据库返回空值

sql-server-2005 - SQL Server更新触发器,获取更新前后的字段

sql - 如何从与给定名称匹配的服务器上的所有数据库中删除特定安全用户?

PHP list+explode VS substr+strpos - 哪个更有效率?

sql - 选择最新的测量结果

sql - PostGIS 错误 : Could not choose a best candidate function

php - 在 php 中使用三元运算符根据 sql 中的事件状态回显不同的状态

sql - 如何从 SQL Server 2005 表中删除字段

python - 由于 arg 错误,无法使用字符串变量创建实例

java - 根据java中的字符串条件分割成数组