標籤:style blog color io os 使用 strong sp 資料
Ø 索引
1、 什麼是索引
索引就是資料表中資料和相應的儲存位置的列表,利用索引可以提高在表或視圖中的尋找資料的速度。
2、 索引分類
資料庫中索引主要分為兩類:叢集索引和非叢集索引。SQL Server 2005還提供了唯一索引、索引檢視表、全文索引、xml索引等等。叢集索引和非叢集索引是資料庫引擎中索引的最基本類型,是理解其他類型索引的基礎。
# 叢集索引 (物理所引)
叢集索引是值表中資料行的實體儲存體順序和索引的儲存順序完全相同。叢集索引根據索引順序物理地址重新排列了使用者插入到表中的資料,因此,每個表只能建立一個叢集索引。叢集索引經常建立在表中經常被搜尋到的列或按順序訪問的列上。在預設情況下,主鍵約束自動建立叢集索引。
# 非叢集索引
非叢集索引不改變表中資料列的實體儲存體位置,資料與索引分開儲存,通過索引指向的地址與表中的資料發生關係。
非叢集索引沒有改變表中物理行的位置,索引可以在以下情況下使用非叢集索引:
一、如果某個欄位的資料唯一性比較高
二、如果查詢所得到的資料量比較少
叢集索引和非叢集索引的區別:
叢集索引 |
非叢集索引 |
每個表只允許建立一個叢集索引 |
最多可以有249個非叢集索引 |
物理的重排表中的資料以符合索引約束 |
建立一個索引值列表,索引值指向資料在資料頁中的位置 |
用於經常尋找資料的列 |
用於從表中尋找單個值的列 |
# 其他類型索引
除了以上索引,還有以下類型索引:
a、 唯一索引:如果希望索引鍵都不同,可以建立唯一索引。叢集索引和非叢集索引都可以是唯一索引。
b、 包含新列索引:索引列的最大數量是16個,索引列的位元組總數的最高值是900。如果當多個列的位元組總數大於900,切又想在這些列中都包含索引時,可以使用包含性列索引。
c、 視圖索引:提供視圖查詢效率,可以視圖的索引物理化,也就是說將結果集永久儲存在索引中,可以建立視圖索引。
d、 XML索引:是與xml資料關聯的索引形式,是XML二進位blob的已拆分持久表示形式。
e、 全文索引:一種特殊類型的基於標記的功能性功能,用於協助在字串中搜尋賦值的詞。
3、 建立索引
-- 文法-- unique: 唯一索引 -- clustered: 叢集索引 -- noclustered: 非叢集索引 -- fillfactor: 填滿因數大小,範圍在0-100直接,表示索引頁填滿的空間所佔的百分比create [unique] [clustered | noclustered]index index_nameon table_name (column_name ...)[with fillfactor=x]-- 一般索引create index idx_stu_name on student(name);-- 聯合索引create unique clustered index idx_uqe_clu_stu_name_age on student(name, age);-- 非叢集索引create nonclustered index idx_cid on student (cid) with fillFactor = 30; // 填滿因數-- 叢集索引create clustered index idx_sex on student(sex);-- 叢集索引create unique index idx_name on student(name);
4、 適合的建立索引的列
當資料庫的某一列被頻繁的用於資料庫查詢時,或者該列用於資料庫進行排序時可以建立成索引
5、 不適合建立索引的列
如果列中有幾個不同的值,或者表中僅包含幾行值,則不推薦為其建立索引。因為索引在搜尋資料所花的時間比在表中逐行搜尋話的時間更長。
Ø 視圖
1、 什麼是視圖
視圖就是一個虛擬資料表,該資料表中的資料記錄是由一條查詢語句的查詢結果得到的。
2、 建立視圖準則
建立視圖需要考慮一下準則:
# 視圖名稱必須遵循標識符的規則,該名稱不得與該架構的如何表的名稱相同
# 你可以對其他視圖建立視圖。允許嵌套視圖,但嵌套不得超過32層。視圖最多可以有1024個欄位
# 不能將規則和default定義於視圖相關聯
# 視圖的查詢不能包含compute子句、compute by子句或into關鍵字
# 定義視圖的查詢不能包含order by子句,除非在select 語句的挑選清單中還有top子句
下列情況必須指定視圖中每列的名稱:
# 視圖中的如何列都是從算術運算式、內建函數或常量派生而來
# 視圖中有兩列或多列具有相同名稱(通常由於視圖定義包含聯結,因此來自兩個或多個不同的列具有相同的名稱)
# 希望視圖中的列指定一個與其原列不同的名稱(也可以在視圖中重新命名列)。無論是否重新命名,視圖列都回繼承原列的資料類型
3、 建立、修改、加密視圖
-- 建立視圖create view v_stuasselect id, name, age, sex from student;-- 修改視圖 alter view v_stuasselect id, name, sex from student;alter view v_stu(編號, 名稱, 性別)asselect id, name, sex from student-- 加密視圖 create view v_student_infowith encryption //加密asselect id, name, age from student
SQL Server 索引和視圖