2012-04-23 37 views
1

我有以下幾列僱員表定義一個索引:定義了四個指標對戰在搜索領域

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

,我有一個搜索功能來搜索使用任何這些領域的員工: -

First_name 
Last_name 
Telephone 
Dateofbirth 

而且用戶可以指定這些字段的任意組合來包含在搜索中。

我們提高搜索的是創建索引的最佳途徑,,我應該: -

  1. 在四個搜索字段創建單獨的四項指標?

OR

  1. 這將是最好創建一個包含四列在一起的單一指標?

OR

  1. 還有第三個更好的解決辦法?

BR

+0

的指數'(名字,姓氏,電話,出生日期)'會不會** **幫助搜索只是一個單獨的'時last_name'你。只有在使用了n個最左側的列時才能使用它。所以一個有四列的索引通常是毫無意義的 - 除非你有很多查詢**總是**使用全部四列...... – 2012-04-23 06:04:00

回答

2

第二個選項(在所有四列一個索引)是不太可能,除非你知道,用戶總是有一列是有用的,幾乎總是包括第二列,等等。任何查詢不考慮索引中的第一列不會使用該索引,至少是爲了索引查找的目的。如果在選擇列表中不包含其他列,那麼這種索引仍可能用於在這些情況下檢索數據。

是否所有四個指標都是必要的,我不確定。是否有可能會在沒有姓氏的情況下搜索名字?你認爲用戶多久會搜索John?我會讓這些掃描並將它們合併爲一個索引(LastName,FirstName)。如果你有很多關於出生日期的搜索,我也會感到驚訝。員工知道(或容易發現)他們的同事的年齡/生日是否真的很常見?

+0

所以你的意思是我應該只包括名字和姓氏作爲搜索字段,然後爲這兩個字段定義單一索引? – 2012-04-23 16:14:53

+0

我不知道你是否應該。這可能是我會做的。 – 2012-04-23 16:15:56

0

使用傳統索引並不是真正理想的解決方案。如果你考慮它是如何工作的,那麼索引實際上就像對照特定字段排序表一樣。因此,如果您只有一個索引包含所有四列,則只能真正使用第一個索引。如果您使用四個索引,則SQL Server可以按順序依次搜索每個索引。

然而,以上是沒有實際意義,如果你對一個通配符搜索模式:

COLUMN LIKE '%searchstring%' 

,搜索無法使用index--將不得不尋找每一行的內容。

所有這些都表明您應該考慮一個全文索引,它完全適用於這種情況。

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