做者:丶平凡世界 數據庫
來源:SQL數據庫開發函數
提到SQL索引,想必小夥伴們都知道,它是爲了提升查詢效率而生。可是在查詢過程當中,怎麼才能讓咱們的查詢語句使用到索引?相必你們或多或少都會遇到這樣的問題。今天咱們就來回答這個問題。性能
一、彙集索引和非彙集索引優化
索引通常分爲彙集索引和非彙集索引。spa
彙集索引速度很快,但只能建一個,因此儘可能把常常使用的列建成彙集索引。索引
非彙集索引雖然沒彙集索引快,可是能夠建多個,比全表掃描快。開發
二、如何創建高效的索引rem
A.關聯條件上創建索引it
例如:class
SELECT * FROM T1
JOIN T2 ON T1.ORDER_ID=T2.ORDER_ID;
在關聯條件ON後面的兩個列就能夠分別創建索引,這樣會很快將符合關聯條件的數據查詢出來。
B.在條件查詢上創建索引
例如:
SELECT * FROM T1
WHERE T1.PRICE>20;
在WHERE條件PRICE列上就能夠創建索引。
注意:如下幾種狀況不會使用索引
C.創建索引的原則
D.聯合索引的妙用
聯合索引就是幾個列合在一塊兒組成一個索引,這種在WHERE條件中相比單列索引會起到意想不到效果。
例如:
SELECT * FROM T1 WHERE T1.CITY=‘北京’ AND T1.DISTR='海淀區';
這個時候將列CITY和DISTR創建成一個聯合索引,效果會更好。
注意:聯合索引須要按順序走,若是中間某個索引不能使用,那它以後的列均不會使用索引。
例如:
SELECT * FROM T1
WHERE T1.CITY=‘北京’
AND LEFT(T1.DISTR,3)='海淀區'
AND T1.ROAD='#10'
若是咱們將CITY,DISTR,ROAD創建成爲聯合索引,因爲索引的前置規則,只會讓CITY走索引,後面的DISTR由於使用了函數,索引失效,最後的ROAD列由於DISTR的失效也會跟着失效,這裏記住便可。
三、什麼狀況不適合創建索引
因爲建立索引和維護索引耗時,時間隨着數據的增長而增長,成正比;須要佔物理空間;當對錶中的數據進行維護時,對索引也要進行維護,這樣就下降了數據的維護速度。基於這些缺點,如下狀況不適合創建索引