1

我有一个包含以下列的员工表:

employeeID (PK)
First_name
    Last_name
    Third_name
    Age
    Sex
    Telephone
    Dateofbirth
    Position

我有一个搜索功能,可以使用以下任何字段搜索员工:-

First_name
Last_name
Telephone
Dateofbirth

并且用户可以指定这些字段的任意组合以包括在搜索中。

现在要改进搜索什么是创建索引的最佳方法,我应该:-

  1. 在四个搜索字段上创建单独的四个索引?

或者

  1. 创建一个包含四列的单个索引会更好吗?

或者

  1. 还有第三个更好的解决方案吗?

BR

4

2 回答 2

2

第二个选项(所有四列上的一个索引)不太可能有用,除非您知道用户总是包含一列,几乎总是包含第二列,等等。任何不查看第一列的查询index 不会使用该索引,至少出于索引查找的目的。如果选择列表中不包含其他列,则此类索引仍可用于在这些情况下检索数据。

是否所有四个索引都是必要的,我不确定。是否真的有可能在没有姓氏的情况下搜索名字?您认为用户多久会搜索一次 John?我会让那些扫描并将它们组合为一个索引(LastName,FirstName)。如果您多次搜索出生日期,我也会感到惊讶。员工知道(或可以轻松找到)同事的年龄/生日真的很普遍吗?

于 2012-04-23T02:49:31.363 回答
0

使用传统索引并没有真正理想的解决方案。如果您考虑它的工作原理,索引实际上就像根据特定字段对表进行排序。因此,如果您只有一个包含所有四列的索引,那么无论如何它只能真正使用第一个。如果您使用四个索引,则 SQL Server 可以按顺序搜索每个索引。

但是,如果您正在搜索通配符模式,则上述内容没有实际意义:

COLUMN LIKE '%searchstring%'

该搜索不能使用索引——它必须搜索每一行的内容。

所有这些都表明您应该考虑使用全文索引,这正是针对这种情况的。

http://msdn.microsoft.com/en-us/library/ms142571.aspx

于 2012-04-23T02:58:39.517 回答