sql語句優化五(索引的介紹)

2021-09-09 06:42:50 字數 2140 閱讀 3587

一、索引的介紹

sql索引在資料庫優化中占有乙個非常大的比例, 乙個好的索引的設計,可以讓你的效率提高幾十甚至幾百倍,在這裡將帶你一步步揭開他的神秘面紗。

sql索引有兩種,聚集索引和非聚集索引,索引主要目的是提高了sql server系統的效能,加快資料的查詢速度與減少系統的響應時間 。

下面舉兩個簡單的例子:

圖書館的例子:乙個圖書館那麼多書,怎麼管理呢?建立乙個字母開頭的目錄,例如:a開頭的書,在第一排,b開頭的在第二排,這樣在找什麼書就好說了,這個就是乙個聚集索引,可是很多人借書找某某作者的,不知道書名怎麼辦?圖書管理員在寫乙個目錄,某某作者的書分別在第幾排,第幾排,這就是乙個非聚集索引。

字典的例子:字典前面的目錄,可以按照拼音和部首去查詢,我們想查詢乙個字,只需要根據拼音或者部首去查詢,就可以快速的定位到這個漢字了,這個就是索引的好處,拼音查詢法就是聚集索引,部首查詢就是乙個非聚集索引。

看了上面的例子,下面的一句話大家就很容易理解了:聚集索引儲存記錄是物理上連續存在,而非聚集索引是邏輯上的連續,物理儲存並不連續。就像字段,聚集索引是連續的,a後面肯定是b,非聚集索引就不連續了,就像圖書館的某個作者的書,有可能在第1個貨架上和第10個貨架上。還有乙個小知識點就是:聚集索引乙個表只能有乙個,而非聚集索引乙個表可以存在多個。

首先,無索引的表,查詢時,是按照順序存續的方法掃瞄每個記錄來查詢符合條件的記錄,這樣效率十分低下,舉個例子,如果我們將字典的漢字隨即打亂,沒有前面的按照拼音或者部首查詢,那麼我們想找乙個字,按照順序的方式去一頁頁的找,這樣效率有多底,大家可以想象。

聚集索引和非聚集索引的根本區別是表記錄的排列順序和與索引的排列順序是否一致,其實理解起來非常簡單,還是舉字典的例子:如果按照拼音查詢,那麼都是從a-z的,是具有連續性的,a後面就是b,b後面就是c, 聚集索引就是這樣的,他是和表的物理排列順序是一樣的,例如有id為聚集索引,那麼1後面肯定是2,2後面肯定是3,所以說這樣的搜尋順序的就是聚集索引。非聚集索引就和按照部首查詢是一樣是,可能按照偏房查詢的時候,根據偏旁『弓』字旁,索引出兩個漢字,張和弘,但是這兩個其實乙個在100頁,乙個在1000頁,(這裡只是舉個例子),他們的索引順序和資料庫表的排列順序是不一樣的,這個樣的就是非聚集索引。

原理明白了,那他們是怎麼儲存的呢?在這裡簡單的說一下,聚集索引就是在資料庫被開闢乙個物理空間存放他的排列的值,例如1-100,所以當插入資料時,他會重新排列整個整個物理空間,而非聚集索引其實可以看作是乙個含有聚集索引的表,他只僅包含原表中非聚集索引的列和指向實際物理表的指標。他只記錄乙個指標,其實就有點和堆疊差不多的感覺了

動作描述

使用聚集索引 

使用非聚集索引

外來鍵列應

應主鍵列應應

列經常被分組排序(order by)應應

返回某範圍內的資料應不應

小數目的不同值應不應

大數目的不同值不應應

頻繁更新的列

不應 應

頻繁修改索引列不應應

乙個或極少不同值

不應不應

建立索引的原則:

1) 定義主鍵的資料列一定要建立索引。

2) 定義有外來鍵的資料列一定要建立索引。

3) 對於經常查詢的資料列最好建立索引。

4) 對於需要在指定範圍內的快速或頻繁查詢的資料列;

5) 經常用在where子句中的資料列。

6) 經常出現在關鍵字order by、group by、distinct後面的字段,建立索引。如果建立的是復合索引,索引的字段順序要和這些關鍵字後面的字段順序一致,否則索引不會被使用。

7) 對於那些查詢中很少涉及的列,重複值比較多的列不要建立索引。

8) 對於定義為text、image和bit的資料型別的列不要建立索引。

9) 對於經常訪問的列避免建立索引 

9) 限制表上的索引數目。對乙個存在大量更新操作的表,所建索引的數目一般不要超過3個,最多不要超過5個。索引雖說提高了訪問速度,但太多索引會影響資料的更新操作。

10) 對復合索引,按照欄位在查詢條件**現的頻度建立索引。在復合索引中,記錄首先按照第乙個字段排序。對於在第乙個欄位上取值相同的記錄,系統再按照第二個欄位的取值排序,以此類推。因此只有復合索引的第乙個字段出現在查詢條件中,該索引才可能被使用,因此將應用頻度高的字段,放置在復合索引的前面,會使系統最大可能地使用此索引,發揮索引的作用。

sql語句 索引介紹

目錄 一 基本概念 1.查詢複雜度 查詢的次數 2.排序的目的就是為了高效的查詢 3.資料結構 樹結構 tree 二 索引 1.索引概念 2.b 數 3.索引其實就是一種資料結構,可以加快我們的查詢速率 4.使用索引的區間 測試複雜度,使用的是悲觀態度,複雜度用o x 表示 常規的查詢 順序查詢 安...

SQL語句優化介紹

1,對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引 2,應盡量避免在 where 子句中對字段進行 null 值判斷,建立表時null是預設值,但大多數時候應該使用not null,或者使用乙個特殊的值,如0,1作為默 認值。3,應盡量避免在 ...

SQL的優化及索引介紹

今天看到了乙個貼子,簡單介紹一下 影響查詢效能的兩個關鍵因素 索引,表掃瞄次數 所以優化的目標就是怎樣更好的利用索引和減少表掃瞄次數 不過得先知道什麼是索引?索引有什麼特點?有幾種型別的索引?索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 name 列。如果要按姓...