我一直在尝试搜索有关SQL Server如何处理唯一索引的原因,因为这将需要创建一个名为user的表,该表将具有first_name和last_name列,我们的应用程序将具有一个搜索功能,该功能通常会搜索first_name或last_name,但我想知道是否创建像这样的语句
,从而在其上定义了带有first_name和last_name的唯一索引SELECT *
FROM user_table
WHERE first_name LIKE 'a%' OR last_name LIKE 'a%';
此语句是否仍会影响我为其创建的唯一索引,其中包括first_name
和last_name
?还是为每个索引定义单独的索引以优化搜索会更好?
答案 0 :(得分:0)
如果您有索引
(first_name, last_name)
然后此索引可能由SQL Server使用:
first_name
子句中使用last_name
和 WHERE
first_name
子句中仅使用WHERE
last_name
子句中仅使用 WHERE
如果在WHERE
子句中使用了该索引的 N个最左列,则可以使用“化合物”索引。
答案 1 :(得分:0)
如果您要优化查询,那么我建议将其编写为:
SELECT *
FROM user_table
WHERE first_name LIKE 'a%'
UNION ALL
SELECT *
FROM user_table
WHERE last_name LIKE 'a%' AND first_name NOT LIKE 'a%';
此查询可以利用(last_name)
和(first_name)
上的两个索引-如果需要,可以在索引中包括更多列。
也就是说,索引可能不会具有很高的选择性,因此对性能的改善可能不会很大。