近段時間去面試,很多都會問到關於sql語句優化及大資料量資料查詢速度提公升的問題,但是由於我個人之前開發都是一知半解的狀態,很多東西都沒能掌握明白,感覺自己就是菜鳥一枚,暈死,和朋友閒聊聊到查詢效率的提公升可以通過建立聚集索引分割槽。所以,就好好了解下這其中的原理。
一.索引的概念
資料庫索引,是資料庫管理系統中乙個排序的資料結構
,以協助快速查詢、更新資料庫表中資料。
聚集索引表的儲存結構
二.怎麼建立合適高效的索引
一般來說,應該在這些列上建立索引:
1.在經常需要搜尋的列上,可以加快搜尋的速度;
2.在作為主鍵的列上,強制該列的唯一性和組織表中資料的排列結構;
3.經常用在連線的列上,這些列主要是一些外來鍵,可以加快連線的速度;
4.在經常需要根據範圍進行搜尋的列上建立索引,因為索引已經排序,其指定的範圍是連續的;
5.在經常需要排序的列上建立索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間;
6.在經常使用在where子句中的列上面建立索引,加快條件的判斷速度。
同樣,對於有些列不應該建立索引。一般來說,不應該建立索引的的這些列具有下列特點:
1.對於那些在查詢中很少使用或者參考的列不應該建立索引。這是因為,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度。相反,由於增加了索引,反而降低了系統的維護速度和增大了空間需求。
2.對於那些只有很少資料值的列也不應該增加索引。這是因為,由於這些列的取值很少,例如人事表的性別列,在查詢的結果中,結果集的資料行佔了表中資料行的很大比例,即需要在表中搜尋的資料行的比例很大。增加索引,並不能明顯加快檢索速度。
3.對於那些定義為text, image和bit資料型別的列不應該增加索引。這是因為,這些列的資料量要麼相當大,要麼取值很少。
4.當修改效能遠遠大於檢索效能時,不應該建立索引。這是因為,修改效能和檢索效能是互相矛盾的。當增加索引時,會提高檢索效能,但是會降低修改效能。當減少索引時,會提高修改效能,降低檢索效能。因此,當修改效能遠遠大於檢索效能時,不應該建立索引。
根據資料庫的功能,可以在資料庫設計器中建立三種索引:唯一索引、主鍵索引和聚集索引。
三.索引的代價
1.佔據資料儲存空間
2.更新和插入資料花費更多時間,因為需要對索引進行變動
SQLServer效能優化之查詢提示
資料庫於週日被重啟了,剛好看看優化後的效果,順便再找找新的需要優化的sql 剛好找到了類似的幾條語句,如下 select from tablea where id not in select id from tableb 從執行時間20秒 70秒不等。開始分析 首先是否用上索引,兩個id均是主鍵所以...
SQL Server 查詢效能優化 相關文章
來自 sql server 查詢效能優化 堆表 碎片與索引 一 sql server 查詢效能優化 堆表 碎片與索引 二 sql server 查詢效能優化 覆蓋索引 一 sql server 查詢效能優化 覆蓋索引 二 sql server 查詢效能優化 建立索引原則 一 sql server 查...
SQLServer效能優化之查詢提示
資料庫於週日被重啟了,剛好看看優化後的效果,順便再找找新的需要優化的sql 剛好找到了類似的幾條語句,如下 select from tablea where id not in select id from tableb 從執行時間20秒 70秒不等。開始分析 首先是否用上索引,兩個id均是主鍵所以...