1. 程式人生 > >關於SQLServer2000資料庫索引的總結

關於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的列的表請求進行增量填充仍將為表進行完全填充操作