SQL Server名字和姓氏的唯一索引

时间:2018-07-16 02:47:24

标签: sql sql-server database indexing

我一直在尝试搜索有关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_namelast_name?还是为每个索引定义单独的索引以优化搜索会更好?

2 个答案:

答案 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)上的两个索引-如果需要,可以在索引中包括更多列。

也就是说,索引可能不会具有很高的选择性,因此对性能的改善可能不会很大。