【发布时间】:2021-09-23 00:46:37
【问题描述】:
要求:表Product 有名称和条形码
我想创建一个非聚集索引以使用名称或条形码进行搜索
查询样本
DECLARE @Filter NVARCHAR(100) = NULL
SET @Filter = '%' + ISNULL(@Filter, '') + '%'
SELECT *
FROM Product
WHERE Name LIKE @Filter
OR Barcode LIKE @Filter
请帮助我提供独立于名称和条形码的两个索引的任何解决方案 或使用一个索引包括名称和条形码
【问题讨论】:
-
当您的过滤器可以以
%开头时,索引将无济于事 -
创建一个 FULLTEXT 索引并使用 CONTAINS() ?
-
好吧,当我说它对你没有帮助时,那并不完全正确。 SQL Server 仍然需要搜索每一行,但使用索引会从磁盘读取更少的数据,即仅索引列而不是整行 - 这确实会提高性能。
-
按名称搜索和按条形码搜索在逻辑上是截然不同的搜索技术。如果您需要使用相同的值搜索两列,则某些内容似乎很糟糕。我建议您重新考虑建议将此查询作为适当路径的决策和实施选择。阅读此kitchen-sink example 以获取有关优化搜索的更多建议 - 特别是动态 sql 建议。
标签: sql-server where-clause non-clustered-index or-operator