講解MySQL索引的概念及資料庫索引的應用

2021-08-29 15:11:53 字數 3786 閱讀 8609

[b] 1.資料庫引入了索引[/b]

使用者對資料庫最頻繁的操作是進行資料查詢。一般情況下,資料庫在進行查詢操作時需要對整個表進行資料搜尋。當表中的資料很多時,搜尋資料就需要很長的時間,這就造成了伺服器的資源浪費。為了提高檢索資料的能力,資料庫引入了索引機制。

[b]2.有關「索引」的比喻[/b]

從某種程度上,可以把資料庫看作一本書,把索引看作書的目錄,通過目錄查詢書中的資訊,顯然較沒有目錄的書方便、快捷。

[b]3.資料庫索引實際是什麼?(兩部分組成)[/b]

索引是乙個單獨的、物理的資料庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。

[b]4.索引在表中的角色[/b]

乙個表的儲存是由兩部分組成的,一部分用來存放表的資料頁面,另一部分存放索引頁面。索引就存放在索引頁面上,

[b]5.索引高效原理[/b]

通常,索引頁面相對於資料頁面來說小得多。當進行資料檢索時,系統先搜尋索引頁面,從中找到所需資料的指標,再直接通過指標從資料頁面中讀取資料。

[b]6.索引的分類[/b]

在sql server 的資料庫中按儲存結構的不同將索引分為兩類:簇索引(clustered index)和非簇索引(nonclustered index)。

(1)簇索引對錶的物理資料頁中的資料按列進行排序,然後再重新儲存到磁碟上,即簇索引與資料是混為一體,的它的葉節點中儲存的是實際的資料。由於簇索引對錶中的資料一一進行了排序,因此用簇索引查詢資料很快。但由於簇索引將表的所有資料完全重新排列了,它所需要的空間也就特別大,大概相當於表中資料所佔空間的120% 。表的資料行只能以一種排序方式儲存在磁碟上,所以乙個表只能有乙個簇索引。

(2)非簇索引具有與表的資料完全分離的結構,使用非簇索引不用將物理資料頁中的資料按列排序。非簇索引的葉節點中儲存了組成非簇索引的關鍵字的值和行定位器。行定位器的結構和儲存內容取決於資料的儲存方式。如果資料是以簇索引方式儲存的,則行定位器中儲存的是簇索引的索引鍵;如果資料不是以簇索引方式儲存的,這種方式又稱為堆儲存方式(heap structure),則行定位器儲存的是指向資料行的指標。非簇索引將行定位器按關鍵字的值用一定的方式排序,這個順序與表的行在資料頁中的排序是不匹配的。由於非簇索引使用索引頁儲存因此它比簇索引需要更多的儲存空間且檢索效率較低但乙個表只能建乙個簇索引,當使用者需要建立多個索引時就需要使用非簇索引了。

小結:clustered index 是與物理資料混在一起並對物理資料進重排,就像使用拼音查字典;unclustered index 是與物理資料完全分離的,利用額外空間對關鍵字進行重排,就像使用部首查字典。

資料庫索引應用

[b]一、索引的概念[/b]

索引就是加快檢索表中資料的方法。資料庫的索引類似於書籍的索引。在書籍中,索引允許使用者不必翻閱完整個書就能迅速地找到所需要的資訊。在資料庫中,索引也允許資料庫程式迅速地找到表中的資料,而不必掃瞄整個資料庫。

[b]二、索引的特點[/b]

1.索引可以加快資料庫的檢索速度

2.索引降低了資料庫插入、修改、刪除等維護任務的速度

3.索引建立在表上,不能建立在檢視上

4.索引既可以直接建立,也可以間接建立

5.可以在優化隱藏中,使用索引

6.使用查詢處理器執行sql語句,在乙個表上,一次只能使用乙個索引

7.其他

[b] 三、索引的優點[/b]

1.建立唯一性索引,保證資料庫表中每一行資料的唯一性 2.大大加快資料的檢索速度,這也是建立索引的最主要的原因

3.加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。

4.在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。

5.通過使用索引,可以在查詢的過程中使用優化隱藏器,提高系統的效能。

[b]四、索引的缺點[/b]

[b]1.[/b]建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加

[b]2.[/b]索引需要佔物理空間,除了資料表佔資料空間之外,每乙個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大

3.當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,降低了資料的維護速度

[b]五、索引分類[/b]

[b]1.[/b]直接建立索引和間接建立索引

直接建立索引: create index mycolumn_index on mytable (myclumn)

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

[b]2.[/b]普通索引和唯一性索引

普通索引:create index mycolumn_index on mytable (myclumn)

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

create unique coustered index myclumn_cindex on mytable(mycolumn)

[b]3.[/b]單個索引和復合索引

單個索引:即非復合索引

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

create index name_index on username(firstname,lastname)

[b]4.[/b]聚簇索引和非聚簇索引(聚集索引,群集索引)

聚簇索引:物理索引,與基表的物理順序相同,資料值的順序總是按照順序排列

create clustered index mycolumn_cindex on mytable(mycolumn) with

allow_dup_row(允許有重覆記錄的聚簇索引)

非聚簇索引:create unclustered index mycolumn_cindex on mytable(mycolumn)

[b]六、索引的使用[/b]

[b]1.[/b]當欄位資料更新頻率較低,查詢使用頻率較高並且存在大量重複值是建議使用聚簇索引

[b]2.[/b]經常同時訪問多列,且每列都含有重複值可考慮建立組合索引

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

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

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

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

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

[b]7.[/b]要善於使用儲存過程,它使sql變得更加靈活和高效。

資料庫 索引的概念及建立

學習一下索引。索引應該是oracle的初級內容中比較重要的一部分。因為是否建立索引,對sql的查詢效率會有比較大的影響。當然對於何種索引,索引如何工作的原理,基本上只需要了解就可以了,不需要太過於深入,除非以後要做專門的sql調優,否則一般的情況下很少會需要設定索引型別的情況。什麼是索引 索引是一種...

SQL Server索引概念及如何建立索引

最近一直在研究資料庫優化的方案,其中索引是必不可少的部分 什麼是索引 拿漢語字典的目錄頁 索引 打比方 正如漢語字典中的漢字按頁存放一樣,sql server中的資料記錄也是按頁存放的,每頁容量一般為4k 為了加快查詢的速度,漢語字 詞 典一般都有按拼音 筆畫 偏旁部首等排序的目錄 索引 我們可以選...

全文索引的概念及原理

索引所有搜尋引擎的乙個核心概念 將原始資料處理成乙個高效的交差引用的查詢結構以便於快速的搜尋。我們生活中的資料總體分為兩種 結構化資料和非結構化資料。結構化資料 指具有固定格式或有限長度的資料,如資料庫,元資料等。非結構化資料 指不定長或無固定格式的資料,如郵件,word文件等。當然有的地方還會提到...