【发布时间】:2019-04-10 13:51:48
【问题描述】:
我需要在我的应用程序中使用“搜索”功能,在 SQL Server 中执行此操作的最佳方法是什么?
- 使用 OR 语句创建包含 1 个包含所有列的大型 where 子句的查询,并创建 1 个包含所有列的索引
SELECT *
FROM Customer
WHERE CustomerNumber LIKE '%' + @SearchValue +'%'
OR LastName LIKE '%' + @SearchValue +'%'
OR FirstName LIKE '%' + @SearchValue +'%'
OR
- 使用 UNION 为每列创建单独的查询并为每列创建索引
SELECT *
FROM Customer
WHERE CustomerNumber LIKE '%' + @SearchValue +'%'
UNION
SELECT *
FROM Customer
WHERE LastName LIKE '%' + @SearchValue +'%'
UNION
SELECT *
FROM Customer
WHERE FirstName LIKE '%' + @SearchValue +'%'
我听说索引不支持 OR 语句?那么解决方案 2 是唯一正确的解决方案吗?
对于你们中的一些人来说,这似乎是一个非常简单的问题,但我试图理解“为什么”我需要这样做,因此欢迎提供任何背景信息。
【问题讨论】:
-
它们可能/可能不会返回相同的结果,具体取决于表数据。 (UNION 删除了重复项。)
-
你从哪里读到索引不支持
OR? -
如果您有两个有效的查询并且您想知道哪个是最好的,测试通常是了解这一点的好方法。支持或不支持 OR 的索引(数据库确实支持它)与这个问题无关,因为您的搜索词无论如何都不能被正常索引搜索(全文索引在这里会很好),因为它们由于通配符而不可搜索。阅读并了解原因很重要。
标签: sql sql-server tsql indexing