我应该在第二列上使用 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
会影响性能吗?是否可以将 CONTAINS
和 LIKE
合并为一个 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”)。
祝你好运。
我有一个 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
会影响性能吗?是否可以将 CONTAINS
和 LIKE
合并为一个 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”)。
祝你好运。