SQL 索引

此文不會列出加索引的優缺點! 只會教新手怎麼建立索引與看加了索引的好處

alter table deer_message_notice add index(user_id); 建立索引 deer_message_notice 這個是表名, 括號裏面的是你需要加上索引的字段

explain select * from deer_message_notice where user_id = 783; explain 這個就是用來查詢這個SQL運行情況

explain 不懂得這麼看,可以去百度搜索資料!

聯合索引的原則,最左原則,有時候,明明加了索引,但是一看執行計劃,卻沒有用上索引,因爲組合索引,它有一個最左原則,下面,貼上對最左原則的解釋:
索引的最左前綴原理:

通常我們在建立聯合索引的時候,也就是對多個字段建立索引,相信建立過索引的同學們會發現,無論是oralce還是mysql都會讓我們選擇

索引的順序,比如我們想在a,b,c三個字段上建立一個聯合索引,我們可以選擇自己想要的優先級,a、b、c,或者是b、a、c 或者是c、a、b

等順序。爲什麼數據庫會讓我們選擇字段的順序呢?不都是三個字段的聯合索引麼?這裏就引出了數據庫索引的最左前綴原理。

比如:索引user:(a,b,c)有三個字段,我們在使用sql語句來查詢的時候,會發現很多情況下不按照我們想象的來走索引。

select * from deer_user where c = ‘1’ 這個sql語句是不會走user索引的

select * from deer_user where b =‘1’ and c =‘2’ 這個語句也不會走user索引。

什麼語句會走index1索引呢?
答案是:
select * from deer_user where a = ‘1’
select * from deer_user where a = ‘1’ and b = ‘2’
總結:
1、需要加索引的字段,要在where條件中

2、數據量少的字段不需要加索引;因爲建索引有一定開銷,如果數據量小則沒必要建索引(速度反而慢)

3、如果where條件中是OR關係,加索引不起作用

4、聯合索引比對每個列分別建索引更有優勢,因爲索引建立得越多就越佔磁盤空間,在更新數據的時候速度會更慢。另外建立多列索引

時,順序也是需要注意的,應該將嚴格的索引放在前面,這樣篩選的力度會更大,效率更高。

5.連接查詢 用到索引 就要優先查詢出加了 索引的字段,然後用這些字段去匹配條件 ,速度會快很多。

發佈了70 篇原創文章 · 獲贊 16 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章