原創 SQL優化之索引的那些事兒

2021-10-01 23:56:06 字數 1338 閱讀 5262

sql專欄

sql基礎知識彙總

sql高階知識彙總

提到索引,想必小夥伴們都知道,它是為了提高查詢效率而生。但是在查詢過程中,怎麼才能讓我們的查詢語句使用索引?相必大家或多或少都會遇到這樣的問題。今天我們就來回答這個問題。

1

聚集索引和非聚集索引

索引一般分為聚集索引和非聚集索引。

聚集索引速度很快,但只能建乙個,所以盡量把經常使用的列建成聚集索引。

非聚集索引雖然沒聚集索引快,但是可以建多個,比全表掃瞄快。

2

如何建立高效的索引

a.關聯條件上建立索引

例如: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的失效也會跟著失效,這裡記住即可。

3

什麼情況不適合建立索引

由於建立索引和維護索引耗時,時間隨著資料的增加而增加,成正比;需要佔物理空間;當對表中的資料進行維護時,對索引也要進行維護,這樣就降低了資料的維護速度。基於這些缺點,以下情況不適合建立索引

SQL的那些事兒

sql語言有以下幾個部分 sql的ddl包含 sql標準支援多種固有型別,包括 create table r a1 d1,a2 d2,an dn,完整性約束1 完成性約束k sql支援許多不同的完整性約束,sql禁止破壞完整性約束的任何資料庫更新 primary key aj 1 aj 2 aj m...

Mysql那些事兒之(八)索引

一 用alter語句建立與刪除索引 索引有一下三種情況 index 普通的索引,索引的列可以包含重複的值。unique 唯一索引,保證了索引的列不包含重複的值。primary key 它是乙個具有primary 的unique索引。這表示乙個表只能包含乙個primary key。alter tabl...

SQL優化之索引

sql優化有很多方法,今天來說一說資料庫索引。舉例說明 假設有乙個圖書book表,裡面有欄位id,name,isbn等。如果圖書數量巨大的話,我們通過isbn查詢通常是比較慢的。新增索引 create index index isbn on book isbn 查詢時間從0.134縮短到0.001,...