我应该在第二列上使用 LIKE 还是 CONTAINS?

Should I use LIKE or CONTAINS on a second column?

我有一个 table,它有 2 列(nvarchar(max)varbinary(max)。二进制列包含 PDF 文档,目录和索引设置为使用此列。

nvarchar 列包含一个 ID 列表(例如“12”、“55”、“69”等)。此列可以包含 100 个 ID,因此文本会很长。

构建搜索查询时,我总是使用 CONTAINS,例如:

SELECT *
FROM mytable
WHERE CONTAINS(mybinarycolumn, 'keyword')

根据搜索,我可能会也可能不会使用辅助列。所以我打算使用 IF 来执行第二个查询,像这样:

SELECT *
FROM mytable
WHERE CONTAINS(mybinarycolumn, 'keyword') AND
mytextcolumn LIKE '%"55"%'

如果我使用 LIKE 会影响性能吗?是否可以将 CONTAINSLIKE 合并为一个 CONTAINS,在搜索中可能会或可能不会使用 mytextcolumn? (如果必须使用文本列,它总是和 AND 与二进制列)。

假设标准化选项不适合您...

我确定性能会受到影响。 LIKE 从来都不是高性能操作,您无法真正构建任何索引来帮助您。如果幸运的话,SQL 优化器将首先执行查询的 CONTAINS 部分,然后仅将 LIKE 应用于匹配结果。 (显示执行计划将成为您的朋友。)

我想不出一个好的方法来将这两列组合成可以用单个 CONTAINS 进行搜索的内容;我想出的任何东西看起来都比您拥有的查询更有效。

您可以尝试在 mytextcolumn 上放置一个全文索引,然后对该列也使用 CONTAINS。我不确定这是否有帮助,但可能值得一试。

我假设 mytextcolumn 中的值是明确分隔的。如果该列包含未加引号的值,例如'12,23,45,67,777,890' 而不是 '"12","23","45","67","777","890"',您的 LIKE 条件不会按您预期的方式工作(因为“%55%”将同时匹配“11,22,55”和“11,22,555”)。

祝你好运。