導航:首頁 > 編程大全 > 資料庫實驗索引的創建和使用

資料庫實驗索引的創建和使用

發布時間:2023-03-16 05:12:54

資料庫索引有哪幾種怎樣建立索引

1、按照索引列值的唯一性,索引可分為唯一索引和非唯一索引;

create index 索引名 on 表名(列名) tablespace表空間名;

建立主鍵或者唯一約束時會自動在對應的列上建立唯一索引;

2、索引列的個數:單列索引和復合索引;

3、按照索引列的物理組織方式。

CREATEUNIUQE|BITMAPINDEX<schema>.<index_name>ON<schema>.<table_name>(<column_name>|<expression>ASC|DESC,<column_name>|<expression>ASC|DESC,...)TABLESPACE<tablespace_name>STORAGE<storage_settings>LOGGING||COMPRESS<nn>NOSORT|REVERSEPARTITION|GLOBALPARTITION<partition_setting>

使用USER_IND_COLUMNS查詢某個TABLE中的相應欄位索引建立情況

使用DBA_INDEXES/USER_INDEXES查詢所有索引的具體設置情況。

在Oracle中的索引可以分為:B樹索引、點陣圖索引、反向鍵索引、基於函數的索引、簇索引、全局索引、局部索引等,下面逐一講解:

一、B樹索引:

最常用的索引,各葉子節點中包括的數據有索引列的值和數據表中對應行的ROWID,簡單的說,在B樹索引中,是通過在索引中保存排過續的索引列值與相對應記錄的ROWID來實現快速查詢的目的。其邏輯結構如圖:

可以保證無論用戶要搜索哪個分支的葉子結點,都需要經過相同的索引層次,即都需要相同的I/O次數。

B樹索引的創建示例:

create index ind_t on t1(id);

注1:索引的針對欄位創建的,相同欄位不能創建一個以上的索引;

注2:默認的索引是不唯一的,但是也可以加上unique,表示該索引的欄位上沒有重復值(定義unique約束時會自動創建);

注3:創建主鍵時,默認在主鍵上創建了B樹索引,因此不能再在主鍵上創建索引。

二、點陣圖索引:

有些欄位中使用B樹索引的效率仍然不高,例如性別的欄位中,只有「男、女」兩個值,則即便使用了B樹索引,在進行檢索時也將返回接近一半的記錄。

所以當欄位的基數很低時,需要使用點陣圖索引。(「低」的標準是取值數量 < 行數*1%)

反向鍵索引是一種特殊的B樹索引,在存儲構造中與B樹索引完全相同,但是針對數值時,反向鍵索引會先反向每個鍵值的位元組,然後對反向後的新數據進行索引。例如輸入2008則轉換為8002,這樣當數值一次增加時,其反向鍵在大小中的分布仍然是比較平均的。

反向鍵索引的創建示例:

createindex ind_t on t1(id) reverse;

註:鍵的反轉由系統自行完成。對於用戶是透明的。

四、基於函數的索引:

有的時候,需要進行如下查詢:select * from t1 where to_char(date,'yyyy')>'2007';

但是即便在date欄位上建立了索引,還是不得不進行全表掃描。在這種情況下,可以使用基於函數的索引。其創建語法如下:

create index ind_t on t1(to_char(date,'yyyy'));

註:簡單來說,基於函數的索引,就是將查詢要用到的表達式作為索引項。

五、全局索引和局部索引:

這個索引貌似很復雜,其實很簡單。總得來說一句話,就是無論怎麼分區,都是為了方便管理。

具體索引和表的關系有三種:

1、局部分區索引:分區索引和分區表1對1

2、全局分區索引:分區索引和分區表N對N

3、全局非分區索引:非分區索引和分區表1對N

創建示例:

首先創建一個分區表

createtable student

(

stuno number(5),

sname vrvhar2(10),

deptno number(5)

)

partition by hash (deptno)

(

partition part_01 tablespace A1,

partition part_02 tablespace A2

);

創建局部分區索引(1v1):

create index ind_t on student(stuno)

local(

partition part_01 tablespace A2,

partition part_02 tablespace A1

);--local後面可以不加

創建全局分區索引(NvN):

create index ind_t on student(stuno)

globalpartition by range(stuno)

(

partition p1 values less than(1000) tablespace A1,

partition p2 values less than(maxvalue) tablespace A2

);--只可以進行range分區

創建全局非分區索引(1vN)

createindex ind_t on student(stuno) GLOBAL;

⑵ 在數據表中索引有什麼用,怎麼建立索引

索引用於快來速找出在某個列源中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢數據所花費的時間就越多。建立索引的操作步驟如下:

1、首先我們打開一個要操作的數據表,如下圖所示,我們需要給name欄位添加索引。

⑶ 資料庫中怎麼建立索引

1.資料庫中的索引分為兩種類型,分別是普通索引、唯一索引。下面讓我們來分別介紹一下這...
2.第一種是普通索引,CREATE INDEX indexName ON mytable(...
3.第二種是唯一索引,它與普通索引是類似的,但也存在不同之處,不同之處在於索引列的值...
4.以上三張圖分別為創建索引、修改表結構、創建表時直接指定的數據。而且還有四種方式來...
5.第一種方式:ALTER TABLE tbl_name ADD PRIMARY KEY (...

⑷ 如何正確使用資料庫索引

問題補充:能不能具體點,新建一個索引就可以了嗎
基本上可以這么說,不過你也可以修改索引。
記住:
索引其實關鍵目的是為了加快檢索速度而建立的,所以,怎麼用索引是資料庫系統本身的事情,作為資料庫設計或使用者,設計並創建好索引然後體驗加上索引後的查詢變快的感覺就行了。所以,索引怎麼用就變為了「怎麼創建合適的索引」
以下回答是否符合你的要求?你還有什麼問題?
第一次回答:
一、索引是什麼
索引是與表或視圖關聯的磁碟上結構,可以加快從表或視圖中檢索行的速度。索引包含由表或視圖中的一列或多列生成的鍵。這些鍵存儲在一個結構(B 樹)中,使 SQL Server 可以快速有效地查找與鍵值關聯的行。
表或視圖可以包含以下類型的索引:
* 聚集
o 聚集索引根據數據行的鍵值在表或視圖中排序和存儲這些數據行。索引定義中包含聚集索引列。每個表只能有一個聚集索引,因為數據行本身只能按一個順序排序。
o 只有當表包含聚集索引時,表中的數據行才按排序順序存儲。如果表具有聚集索引,則該表稱為聚集表。如果表沒有聚集索引,則其數據行存儲在一個稱為堆的無序結構中。
* 非聚集
o 非聚集索引具有獨立於數據行的結構。非聚集索引包含非聚集索引鍵值,並且每個鍵值項都有指向包含該鍵值的數據行的指針。
o 從非聚集索引中的索引行指向數據行的指針稱為行定位器。行定位器的結構取決於數據頁是存儲在堆中還是聚集表中。對於堆,行定位器是指向行的指針。對於聚集表,行定位器是聚集索引鍵。
o 您可以向非聚集索引的葉級添加非鍵列以跳過現有的索引鍵限制(900 位元組和 16 鍵列),並執行完整范圍內的索引查詢。
聚集索引和非聚集索引都可以是唯一的。這意味著任何兩行都不能有相同的索引鍵值。另外,索引也可以不是唯一的,即多行可以共享同一鍵值。
每當修改了表數據後,都會自動維護表或視圖的索引。
索引和約束
對表列定義了 PRIMARY KEY 約束和 UNIQUE 約束時,會自動創建索引。例如,如果創建了表並將一個特定列標識為主鍵,則 資料庫引擎自動對該列創建 PRIMARY KEY 約束和索引。有關詳細信息,請參閱創建索引(資料庫引擎)。
二、索引有什麼用
與書中的索引一樣,資料庫中的索引使您可以快速找到表或索引視圖中的特定信息。索引包含從表或視圖中一個或多個列生成的鍵,以及映射到指定數據的存儲位置的指針。通過創建設計良好的索引以支持查詢,可以顯著提高資料庫查詢和應用程序的性能。索引可以減少為返回查詢結果集而必須讀取的數據量。索引還可以強製表中的行具有唯一性,從而確保表數據的數據完整性。
設計良好的索引可以減少磁碟 I/O 操作,並且消耗的系統資源也較少,從而可以提高查詢性能。對於包含 SELECT、UPDATE、DELETE 或 MERGE 語句的各種查詢,索引會很有用。例如,在 AdventureWorks 資料庫中執行的查詢 SELECT Title, HireDate FROM HumanResources.Employee WHERE EmployeeID = 250。執行此查詢時,查詢優化器評估可用於檢索數據的每個方法,然後選擇最有效的方法。可能採用的方法包括掃描表和掃描一個或多個索引(如果有)。
掃描表時,查詢優化器讀取表中的所有行,並提取滿足查詢條件的行。掃描表會有許多磁碟 I/O 操作,並佔用大量資源。但是,如果查詢的結果集是占表中較高百分比的行,掃描表會是最為有效的方法。
查詢優化器使用索引時,搜索索引鍵列,查找到查詢所需行的存儲位置,然後從該位置提取匹配行。通常,搜索索引比搜索表要快很多,因為索引與表不同,一般每行包含的列非常少,且行遵循排序順序。
查詢優化器在執行查詢時通常會選擇最有效的方法。但如果沒有索引,則查詢優化器必須掃描表。您的任務是設計並創建最適合您的環境的索引,以便查詢優化器可以從多個有效的索引中選擇。SQL Server 提供的資料庫引擎優化顧問可以幫助分析資料庫環境並選擇適當的索引。
三、索引怎麼用
索引其實關鍵目的是為了加快檢索速度而建立的,所以,怎麼用索引是資料庫系統本身的事情,作為資料庫設計或使用者,設計並創建好索引然後體驗加上索引後的查詢變快的感覺就行了。所以,索引怎麼用就變為了「怎麼創建合適的索引」,以下說明這個問題:
索引設計不佳和缺少索引是提高資料庫和應用程序性能的主要障礙。設計高效的索引對於獲得良好的資料庫和應用程序性能極為重要。為資料庫及其工作負荷選擇正確的索引是一項需要在查詢速度與更新所需開銷之間取得平衡的復雜任務。如果索引較窄,或者說索引關鍵字中只有很少的幾列,則需要的磁碟空間和維護開銷都較少。而另一方面,寬索引可覆蓋更多的查詢。您可能需要試驗若干不同的設計,才能找到最有效的索引。可以添加、修改和刪除索引而不影響資料庫架構或應用程序設計。因此,應試驗多個不同的索引而無需猶豫。
SQL Server 中的查詢優化器可在大多數情況下可靠地選擇最高效的索引。總體索引設計策略應為查詢優化器提供可供選擇的多個索引,並依賴查詢優化器做出正確的決定。這在多種情況下可減少分析時間並獲得良好的性能。若要查看查詢優化器對特定查詢使用的索引,請在 SQL Server Management Studio 中的「查詢」菜單上選擇「包括實際的執行計劃」。
不要總是將索引的使用等同於良好的性能,或者將良好的性能等同於索引的高效使用。如果只要使用索引就能獲得最佳性能,那查詢優化器的工作就簡單了。但事實上,不正確的索引選擇並不能獲得最佳性能。因此,查詢優化器的任務是只在索引或索引組合能提高性能時才選擇它,而在索引檢索有礙性能時則避免使用它。
建議的索引設計策略包括以下任務:
1. 了解資料庫本身的特徵。例如,它是頻繁修改數據的聯機事務處理 (OLTP) 資料庫,還是主要包含只讀數據的決策支持系統 (DSS) 或數據倉庫 (OLAP) 資料庫?
2. 了解最常用的查詢的特徵。例如,了解到最常用的查詢聯接兩個或多個表將有助於決定要使用的最佳索引類型。
3. 了解查詢中使用的列的特徵。例如,某個索引對於含有整數數據類型同時還是唯一的或非空的列是理想索引。篩選索引適用於具有定義完善的數據子集的列。
4. 確定哪些索引選項可在創建或維護索引時提高性能。例如,對現有某個大型表創建聚集索引將會受益於 ONLINE 索引選項。ONLINE 選項允許在創建索引或重新生成索引時繼續對基礎數據執行並發活動。
5. 確定索引的最佳存儲位置。非聚集索引可以與基礎表存儲在同一個文件組中,也可以存儲在不同的文件組中。索引的存儲位置可通過提高磁碟 I/O 性能來提高查詢性能。例如,將非聚集索引存儲在表文件組所在磁碟以外的某個磁碟上的一個文件組中可以提高性能,因為可以同時讀取多個磁碟。
或者,聚集索引和非聚集索引也可以使用跨越多個文件組的分區方案。在維護整個集合的完整性時,使用分區可以快速而有效地訪問或管理數據子集,從而使大型表或索引更易於管理。有關詳細信息,請參閱已分區表和已分區索引。在考慮分區時,應確定是否應對齊索引,即,是按實質上與表相同的方式進行分區,還是單獨分區。
# 設計索引。
索引設計是一項關鍵任務。索引設計包括確定要使用的列,選擇索引類型(例如聚集或非聚集),選擇適當的索引選項,以及確定文件組或分區方案布置。
# 確定最佳的創建方法。按照以下方法創建索引:
* 使用 CREATE TABLE 或 ALTER TABLE 對列定義 PRIMARY KEY 或 UNIQUE 約束
SQL Server 資料庫引擎自動創建唯一索引來強制 PRIMARY KEY 或 UNIQUE 約束的唯一性要求。默認情況下,創建的唯一聚集索引可以強制 PRIMARY KEY 約束,除非表中已存在聚集索引或指定了唯一的非聚集索引。默認情況下,創建的唯一非聚集索引可以強制 UNIQUE 約束,除非已明確指定唯一的聚集索引且表中不存在聚集索引。
還可以指定索引選項和索引位置、文件組或分區方案。
創建為 PRIMARY KEY 或 UNIQUE 約束的一部分的索引將自動給定與約束名稱相同的名稱。
* 使用 CREATE INDEX 語句或 SQL Server Management Studio 對象資源管理器中的「新建索引」對話框創建獨立於約束的索引
必須指定索引的名稱、表以及應用該索引的列。還可以指定索引選項和索引位置、文件組或分區方案。默認情況下,如果未指定聚集或唯一選項,將創建非聚集的非唯一索引。若要創建篩選索引,請使用可選的 WHERE 子句。
# 創建索引。
要考慮的一個重要因素是對空表還是對包含數據的表創建索引。對空表創建索引在創建索引時不會對性能產生任何影響,而向表中添加數據時,會對性能產生影響。
對大型表創建索引時應仔細計劃,這樣才不會影響資料庫性能。對大型表創建索引的首選方法是先創建聚集索引,然後創建任何非聚集索引。在對現有表創建索引時,請考慮將 ONLINE 選項設置為 ON。該選項設置為 ON 時,將不持有長期表鎖以繼續對基礎表的查詢或更新。

⑸ 資料庫基礎:講解MySQL索引的概念及資料庫索引的應用[2]

五 索引分類

直接創建索引和間接創建索引

直接創建索引 CREATE INDEX mycolumn_index ON mytable (myclumn)

間接創建索引 定義主鍵約束或者唯一性鍵約束 可以間接創建索引

普通索引和唯一性索引

普通索引 CREATE INDEX mycolumn_index ON mytable (myclumn)

唯一性索引 保證在索引列中的全部數據是唯一的 對聚簇索引和非聚簇索引都可以使用

CREATE UNIQUE COUSTERED INDEX myclumn_cindex ON mytable(mycolumn)

單個索引和復合索引

單個索引 即非復合索引

復合索引 又叫組合索引 在索引建立語句中同時包含多個欄位名 最多 個欄位

CREATE INDEX name_index ON username(firstname lastname)

聚簇索引和非聚簇索引(聚集索引 群集索引)

聚簇索引 物理索引 與基表的物理順序相同 數據值的順序總是按照順序排列

CREATE CLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn) WITH

ALLOW_DUP_ROW(允許有重復記錄的聚簇索引)

非聚簇索引 CREATE UNCLUSTERED INDEX mycolumn_cindex ON mytable(mycolumn)

六 索引的使用

當欄位數據更新頻率較低 查詢使用頻率較高並且存在大量重復值是建議使用聚簇索引

經常同時存取多列 且每列都含有重復值可考慮建立組合索引

復合索引的前導列一定好控制好 否則無法起到索引的效果 如果查詢時前導列不在查詢條件中則該復合索引不會被使用 前導列一定是使用最頻繁的列

多表操作在被實際執行前 查詢優化器會根據連接條件 列出幾組可能的連接方案並從中找出系統開銷最小的最佳方案 連接條件要充份考慮帶有索引的表 行數多的表;內外表的選擇可由公式 外層表中的匹配行數*內層表中每一次查找的次數確定 乘積最小為最佳方案

where子句中對列的任何操作結果都是在sql運行時逐列計算得到的 因此它不得不進行表搜索 而沒有使用該列上面的索引;如果這些結果在查詢編譯時就能得到 那麼就可以被sql優化器優化 使用索引 避免表搜索(例 select * from record where substring(card_no )=

&& select * from record where card_no like % )任何對列的操作都將導致表掃描 它包括資料庫函數 計算表達式等等 查詢時要盡可能將操作移至等號右邊

where條件中的 in 在邏輯上相當於 or 所以語法分析器會將in ( ′ ′)轉化為column= ′ or column= ′來執行 我們期望它會根據每個or子句分別查找 再將結果相加 這樣可以利用column上的索引;但實際上它卻採用了 or策略 即先取出滿足每個or子句的行 存入臨時資料庫的工作表中 再建立唯一索引以去掉重復行 最後從這個臨時表中計算結果 因此 實際過程沒有利用column上索引 並且完成時間還要受tempdb資料庫性能的影響 in or子句常會使用工作表 使索引失效;如果不產生大量重復值 可以考慮把子句拆開;拆開的子句中應該包含索引

要善於使用存儲過程 它使sql變得更加靈活和高效

lishixin/Article/program/MySQL/201311/29603

⑹ mysql索引的創建和使用

我們可以通過查看索引的屬性來判斷創建索引的方法。
查看索引的語法格式如下:
SHOW INDEX FROM <表名> [ FROM <資料庫名>]
語法說明如下:
<表名>:指定需要查看索引的數據表名。
<資料庫名>:指定需要查看索引的數據表所在的資料庫,可省略。比如,SHOW INDEX FROM student FROM test; 語句表示查看 test 資料庫中 student 數據表的索引。
示例
使用 SHOW INDEX 語句查看《MySQL創建索引》一節中 tb_stu_info2 數據表的索引信息,SQL 語句和運行結果如下所示。
mysql> SHOW INDEX FROM tb_stu_info2\G
1. row
Table: tb_stu_info2
Non_unique: 0
Key_name: height
Seq_in_index: 1
Column_name: height
Collation: A
Cardinality: 0
Sub_part: NULL
Packed: NULL
Null: YES
Index_type: BTREE
Comment:
Index_comment:
1 row in set (0.03 sec)
其中各主要參數說明如下:
參數 說明
Table 表示創建索引的數據表名,這里是 tb_stu_info2 數據表。
Non_unique 表示該索引是否是唯一索引。若不是唯一索引,則該列的值為 1;若是唯一索引,則該列的值為 0。
Key_name 表示索引的名稱。
Seq_in_index 表示該列在索引中的位置,如果索引是單列的,則該列的值為 1;如果索引是組合索引,則該列的值為每列在索引定義中的順序。
Column_name 表示定義索引的列欄位。
Collation 表示列以何種順序存儲在索引中。在 MySQL 中,升序顯示值「A」(升純基序),若顯示為 NULL,則表示無分類。
Cardinality 索引中唯一值數目的估計值。基數根據被存儲為整數的統計數據計數,所以即使對於小型表,該值也沒有必要是精確的。基數越大,當進行聯合時,MySQL 使用該索引的機會就越大。
Sub_part 表示列中被編入索引的字元的數量。若列只是部分被編入索引,則該列的值為被編入敬褲胡索引的字元的數目;若整列被編入索引,則該列的值為 NULL。
Packed 指示關鍵字如何被亮攔壓縮。若沒有被壓縮,值為 NULL。
Null 用於顯示索引列中是否包含 NULL。若列含有 NULL,該列的值為 YES。若沒有,則該列的值為 NO。
Index_type 顯示索引使用的類型和方法(BTREE、FULLTEXT、HASH、RTREE)。
Comment 顯示評注。

⑺ 資料庫索引怎麼建立

right © 1999-2020, CSDN.NET, All Rights Reserved

程序員必備的瀏覽器插件
登錄

越來越好ing
關注
資料庫索引是什麼,有什麼用,怎麼用 轉載
2018-12-04 23:30:36
5點贊

越來越好ing

碼齡2年

關注
下面是關於資料庫索引的相關知識:

簡單來說,資料庫索引就是資料庫的數據結構!進一步說則是該數據結構中存儲了一張表中某一列的所有值,也就是說索引是基於數據表中的某一列創建的。總而言之:一個索引是由表中某一列上的數據組成,並且這些數據存儲在某個數據結構中。

2.索引的作用。舉個例子,假設有一張數據表Emplyee,該表有三列:

表中有幾萬條記錄。現在要執行下面這條查詢語句,查找出所有名字叫「Jesus」的員工的詳細信息

3.如果沒有資料庫索引功能,資料庫系統會逐行的遍歷整張表,對於每一行都要檢查其Employee_Name欄位是否等於「Jesus」。因為我們要查找所有名字為「Jesus」的員工,所以當我們發現了一條名字是「Jesus」的記錄後,並不能停止繼續查找,因為可能有其他員工也叫「Jesus」。這就意味著,對於表中的幾萬條記錄,資料庫每一條都要檢查。這就是所謂的「全表掃描」( full table scan)

4.而資料庫索引功能索引的最大作用就是加快查詢速度,它能從根本上減少需要掃表的記錄/行的數量。

5.如何創建資料庫索引。可以基於Employee表的兩列創建索引即可:

拓展資料:

索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定信息。如果想按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助於更

⑻ 哪位高手跟我說說,資料庫中'索引'的用法,怎麼創建,和在select語句中怎麼使用

建立資料庫的目的是管理大量數據,而建立索引的目的就是提高數據檢索效率,改善資料庫工作性能,提高數據訪問速度。當查詢大量數據時不建索引帶條件的查詢會很慢的,索引的創建不同的資料庫有不同的寫法,oracle的寫法是create index 索引名 on 表名();
在select 語句中的where條件每個欄位都要建索引.

索引原理
索引的基本概念索引是一種特殊類型的資料庫對象,它與表有著密切的聯系。索引是為檢索而存在的。如一些書籍的末尾就專門附有索引,指明了某個關鍵字在正文中的出現的頁碼位置,方便我們查找,但大多數的書籍只有目錄,目錄不是索引,只是書中內容的排序,並不提供真正的檢索功能。可見建立索引要單獨佔用空間;索引也並不是必須要建立的,它們只是為更好、更快的檢索和定位關鍵字而存在。再進一步說,我們要在圖書館中查閱圖書,該怎麼辦呢?圖書館的前台有很多叫做索引卡片櫃的小櫃子,裡面分了若乾的類別供我們檢索圖書,比如你可以用書名的筆畫順序或者拼音順序作為查找的依據,你還可以從作者名的筆畫順序或拼音順序去查詢想要的圖書,反正有許多檢索方式,但有一點很明白,書庫中的書並沒有按照這些卡片櫃中的順序排列——雖然理論上可以這樣做,事實上,所有圖書的脊背上都人工的粘貼了一個特定的編號①,它們是以這個順序在排列。索引卡片中並沒有指明這本書擺放在書庫中的第幾個書架的第幾本,僅僅指明了這個特定的編號。管理員則根據這一編號將請求的圖書返回到讀者手中。這是很形象的例子,以下的講解將會反復用到它。SQLS在安裝完成之後,安裝程序會自動創建master、model、tempdb等幾個特殊的系統資料庫,其中master是SQLS的主資料庫,用於保存和管理其它系統資料庫、用戶資料庫以及SQLS的系統信息,它在SQLS中的地位與WINDOWS下的注冊表相當。master中有一個名為sysindexes的系統表,專門管理索引。SQLS查詢數據表的操作都必須用到它,毫無疑義,它是本文主角之一。查看一張表的索引屬性,可以在查詢分析器中使用以下命令:select * from sysindexes where id=object_id(『tablename』) ;而要查看錶的索引所佔空間的大小,可以使用系統存儲過程命令:sp_spaceused tablename,其中參數tablename為被索引的表名。

⑼ 請問資料庫的索引創建後要怎麼用啊

索引建立後,查詢的時候用到那個欄位後自動會引用建立好的索引,索引只需要建立就行了,會自動引用。

⑽ 索引怎麼建立使用

Create Relational Index
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON <object> ( column [ ASC | DESC ] [ ,...n ] )
[ INCLUDE ( column_name [ ,...n ] ) ]
[ WHERE <filter_predicate> ]
[ WITH ( <relational_index_option> [ ,...n ] ) ]
[ ON { partition_scheme_name ( column_name )
| filegroup_name
| default
}
]
[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]

參數
UNIQUE
為表或視圖創建唯一索引。唯一索引不允許兩行具有相同的索引鍵值。視圖的聚集索引必須唯一。

無論 IGNORE_DUP_KEY 是否設置為 ON,資料庫引擎都不允許為已包含重復值的列創建唯一索引。否則,資料庫引擎會顯示錯誤消息。必須先刪除重復值,然後才能為一列或多列創建唯一索引。唯一索引中使用的列應設置為 NOT NULL,因為在創建唯一索引時,會將多個 Null 值視為重復值。

CLUSTERED
創建索引時,鍵值的邏輯順序決定表中對應行的物理順序。聚集索引的底層(或稱葉級別)包含該表的實際數據行。一個表或視圖只允許同時有一個聚集索引。

具有唯一聚集索引的視圖稱為索引視圖。為一個視圖創建唯一聚集索引會在物理上具體化該視圖。必須先為視圖創建唯一聚集索引,然後才能為該視圖定義其他索引。

在創建任何非聚集索引之前創建聚集索引。創建聚集索引時會重新生成表中現有的非聚集索引。

如果沒有指定 CLUSTERED,則創建非聚集索引。

注意:
因為按照定義,聚集索引的葉級別與其數據頁相同,所以創建聚集索引和使用 ON partition_scheme_name 或 ON filegroup_name 子句實際上會將表從創建該表時所在的文件組移到新的分區方案或文件組中。對特定的文件組創建表或索引之前,應確認哪些文件組可用並且有足夠的空間供索引使用。

NONCLUSTERED
創建一個指定表的邏輯排序的索引。對於非聚集索引,數據行的物理排序獨立於索引排序。

無論是使用 PRIMARY KEY 和 UNIQUE 約束隱式創建索引,還是使用 CREATE INDEX 顯式創建索引。每個表都最多可包含 999 個非聚集索引。

對於索引視圖,只能為已定義唯一聚集索引的視圖創建非聚集索引。

默認值為 NONCLUSTERED。

index_name
索引的名稱。索引名稱在表或視圖中必須唯一,但在資料庫中不必唯一。索引名稱必須符合標識符的規則。

column
索引所基於的一列或多列。指定兩個或多個列名,可為指定列的組合值創建組合索引。在 table_or_view_name 後的括弧中,按排序優先順序列出組合索引中要包括的列。

一個組合索引鍵中最多可組合 16 列。組合索引鍵中的所有列必須在同一個表或視圖中。組合索引值允許的最大大小為 900 位元組。

不能將大型對象 (LOB) 數據類型 ntext、text、varchar(max)、 nvarchar(max)、varbinary(max)、xml 或 image 的列指定為索引的鍵列。另外,即使 CREATE INDEX 語句中並未引用 ntext、text 或 image 列,視圖定義中也不能包含這些列。

如果 CLR 用戶定義類型支持二進制排序,則可以為該類型的列創建索引。另外,對於已定義為用戶定義類型列的方法調用的計算列,只要這些方法標記為確定性方法且不執行數據訪問操作,便可為該計算列創建索引。

[ ASC | DESC ]
確定特定索引列的升序或降序排序方向。默認值為 ASC。

INCLUDE ( column [ ,...n ] )
指定要添加到非聚集索引的葉級別的非鍵列。非聚集索引可以唯一,也可以不唯一。

在 INCLUDE 列表中列名不能重復,且不能同時用於鍵列和非鍵列。

除 text、ntext 和 image 之外,允許所有數據類型。如果指定的任一非鍵列屬於 varchar(max)、nvarchar(max) 或 varbinary(max) 數據類型,則必須離線 (ONLINE = OFF) 創建或重新生成該索引。

精確或不精確的確定性計算列都可以是包含列。從 image、ntext、text、varchar(max)、nvarchar(max)、varbinary(max) 和 xml 數據類型派生的計算列可以包含在非鍵列中,前提是允許將這些計算列數據類型作為包含列。

WHERE <filter_predicate>
通過指定索引中要包含哪些行來創建篩選索引。篩選索引必須是對表的非聚集索引。為篩選索引中的數據行創建篩選統計信息。

篩選謂詞使用簡單比較邏輯且不能引用計算列、UDT 列、空間數據類型列或 hierarchyID 數據類型列。比較運算符不允許使用 NULL 文本的比較。請改用 IS NULL 和 IS NOT NULL 運算符。

下面是 Proction.BillOfMaterials 表的篩選謂詞的一些示例:

WHERE StartDate > '20000101' AND EndDate <= '20000630'

WHERE ComponentID IN (533, 324, 753)

WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL

篩選索引不適用於 XML 索引和全文索引。對於 UNIQUE 索引,僅選定的行必須具有唯一的索引值。篩選索引不允許有 IGNORE_DUP_KEY 選項。

ON partition_scheme_name ( column_name )
指定分區方案,該方案定義要將分區索引的分區映射到的文件組。必須通過執行 CREATE PARTITION SCHEME 或 ALTER PARTITION SCHEME,使資料庫中存在該分區方案。column_name 指定將作為分區索引的分區依據的列。該列必須與 partition_scheme_name 使用的分區函數參數的數據類型、長度和精度相匹配。column_name 不限於索引定義中的列。除了在對 UNIQUE 索引分區時,必須從用作唯一鍵的列中選擇 column_name 外,還可以指定基表中的任何列。通過此限制,資料庫引擎可驗證單個分區中的鍵值唯一性。

注意:
在對非唯一的聚集索引進行分區時,如果尚未指定分區依據列,則默認情況下資料庫引擎將在聚集索引鍵列表中添加分區依據列。在對非唯一的非聚集索引進行分區時,如果尚未指定分區依據列,則資料庫引擎會添加分區依據列作為索引的非鍵(包含)列。

如果未指定 partition_scheme_name 或 filegroup 且該表已分區,則索引會與基礎表使用相同分區依據列並被放入同一分區方案中。

有關將索引分區的詳細信息,請參閱已分區索引的特殊指導原則。

ON filegroup_name
為指定文件組創建指定索引。如果未指定位置且表或視圖尚未分區,則索引將與基礎表或視圖使用相同的文件組。該文件組必須已存在。

ON "default"
為默認文件組創建指定索引。

在此上下文中,「default」不是關鍵字。它是默認文件組的標識符,並且必須進行分隔(類似於 ON "default" 或 ON[default])。如果指定了 "default",則當前會話的 QUOTED_IDENTIFIER 選項必須為 ON。這是默認設置。
[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
在創建聚集索引時,指定表的 FILESTREAM 數據的位置。FILESTREAM_ON 子句用於將 FILESTREAM 數據移動到不同的 FILESTREAM 文件組或分區方案。

filestream_filegroup_name 是 FILESTREAM 文件組的名稱。該文件組必須包含一個使用 CREATE DATABASE 或 ALTER DATABASE 語句為該文件組定義的文件;否則,將引發錯誤。

如果表已分區,則必須包含 FILESTREAM_ON 子句並且必須指定 FILESTREAM 文件組的分區方案,且此分區方案需使用與該表分區方案相同的分區函數和分區列。否則將引發錯誤。

如果該表未分區,則無法對 FILESTREAM 列分區。該表的 FILESTREAM 數據必須存儲在一個由 FILESTREAM_ON 子句指定的文件組中。

如果創建的是聚集索引且該表不包含 FILESTREAM 列,則可在 CREATE INDEX 語句中指定 FILESTREAM_ON NULL。

閱讀全文

與資料庫實驗索引的創建和使用相關的資料

熱點內容
linuxwtmp亂碼 瀏覽:16
appcan打開文件 瀏覽:321
字元信息與cad文件版本對照表 瀏覽:11
手機電腦文件怎麼傳 瀏覽:730
網路連接問題怎麼才能聯網 瀏覽:810
復制過的文件在哪裡才能全部找到 瀏覽:424
bat文件夾序號 瀏覽:980
愛思助手導文件在哪裡 瀏覽:779
微信種子群是多少 瀏覽:566
ps真功夫後期教程 瀏覽:645
英雄聯盟美服最新版本 瀏覽:41
樂秀視頻的文件夾 瀏覽:92
華為打開旁白關閉網路怎麼解決 瀏覽:399
劍靈升星還是升級快 瀏覽:885
做伴app軟體如何退款 瀏覽:269
linuxcpu100 瀏覽:70
javawmi 瀏覽:171
java調用sdk的api 瀏覽:17
淘寶導航條透明代碼 瀏覽:557
安卓彈幕代碼 瀏覽:332

友情鏈接