關於SQLServer2000資料庫索引的總結
(補)2005年8月 整理的文件資料
一、索引:根據一列或多列的值,對錶中的行進行快速訪問
作為索引的列:包括在where子句中;查詢經常用到的列;Order By子句常用到的列
聚集索引——“簇索引” 每個表只能有一個聚集索引
非聚集索引——“非簇索引” sql-server預設的索引型別
動作描述 | 使用聚集索引 | 使用非聚集索引 |
列經常被分組排序 | 應 | 應 |
返回某範圍內的資料 | 應 | 不應 |
一個或極少不同值 | 不應 | 不應 |
小數目不同值 | 應 | 不應 |
大數目不同值 | 不應 | 應 |
頻繁更新的列 | 不應 | 應 |
外來鍵列 | 應 | 應 |
主鍵列 | 應 | 應 |
查看錶的索引: exec sp_helpindex TableName
兩種方法在SQLServer中定義索引
(1)建立並命名為索引
(2)在建立Table時,使用如下約束:PK,UNIQUE,CLUSTERED,NONCLUSTERED
注意:資料型別為text,ntext,image 或 bit的列不能作為索引的列;索引列的寬度不能超過900位元組
二、全文索引 用於在對資料量很大的表中進行查詢
基本概念——(SQLServer200聯機文件)
(1)全文索引為在字串資料中進行復雜的詞搜尋提供有效支援
(2)全文索引儲存關於重要詞和這些詞在特定列中的位置的資訊,全文查詢利用這些資訊,可快速搜尋包含具體某一個詞
或一組詞的行
(3)全文索引包含在全文目錄中,每個資料庫可包含一個或多個全文目錄,但一個目錄不能屬於多個數據庫
(4)每個目錄可以包含一個或多個表的全文索引;一個表只能有一個全文索引
(5)全文目錄和索引不儲存在它們所屬的資料庫中
(6)全文索引必須在基表上定義,不能在檢視,系統表,臨時表上定義
sql語法:
當建立了全文索引,則對錶的查詢可以用 contains 替代 like
contains檢索是區分大小寫的,與like不同
如:select xx.xx from TableName where contains(欄位名,'匹配值')
也可結合使用 AND|AND NOT|OR 指定兩個包含搜尋條件之間的邏輯運算
如:select xx from TableName where contains(欄位名,' "sea*" or "bread*" ')
表示包含字串 "sea" 或 "bread" 的所有 xx
使用freetext 用於搜尋含有基於字元的型別的列
(SQLServer200聯機文件)
輸入單詞或短語的任意集合,甚至一個完整的句子。全文查詢引擎將檢查該文字,標識出所有重要的單詞和名詞短語,並用這些條件在內部構造一個查詢
如使用 FREETEXT 謂詞查詢名為 description 的一列。
select xx from TableName where
FREETEXT (description, ' "The Fulton County Grand Jury said Friday an investigation of Atlanta's recent primary election produced no evidence that any irregularities took place." ')
檢索引擎將標識出如下的單詞和名詞短語:
單詞
Fulton, county, grand, jury, Friday, investigation, Atlanta, recent, primary, election, produce, evidence, irregularities
短語
Fulton county grand jury, primary election, grand jury, Atlanta's recent primary election
FREETEXT 字串中的這些單詞和短語(及其變形)在內部結合到一個查詢中,並被賦予適當的加權等級值,然後才執行實際的檢索。
填充形式(SQLServer200聯機文件)
(1)完全填充
如為全文目錄請求完全填充,則為該目錄所涉及的所有表中的所有行生成索引項
如為表請求,則為該表中所有行生成索引項
(2)更改跟蹤填充 維護在系統表中已修改的行的記錄,並將更改傳播到全文索引
(3)增量填充 只調整自上次填充後,新增、刪除或修改的行的索引項
該功能要求索引表包含timestamp資料型別,否則只能執行前二者
對不包含timestamp的列的表請求進行增量填充仍將為表進行完全填充操作