針對資料庫索引的優化

2022-04-08 06:27:10 字數 2020 閱讀 5247

一、如何正確的建立索引

1、對主鍵、外來鍵 建立索引

由於開發中經常通過主鍵或者外來鍵去查詢某條或者多條記錄,所以需要對主鍵、外來鍵建立索引

2、對於經常出現在查詢條件中的字段建立索引

對於經常出現在查詢條件中的字段建立索引往往能提高查詢效率

3、結合需要返回的字段建立索引

對於需要查詢結果返回的字段建立組合索引可以不用查詢資料表就可以得到資料,例如:select id,name,code from student where id=? ,如果對id,name,code建立索引的話,直接查詢索引表就可以得到想要的資料了,這時就不用再訪問student表。

建立索引的常用注意事項有這麼幾個,建立索引當然不是越多越好,如果建立索引不當,還會導致查詢效果比沒有建立索引還低,或者索引表的資料比資料表的資料還大,所以使用需要需要小心謹慎。

下邊給出乙個索引建立指引表:

字段型別

常見欄位名

需要建索引的字段

主鍵id,pk

外來鍵product_id,company_id,member_id,order_id,trade_id,pay_id

有對像或身份標識意義字段

hash_code,username,idcard_no,email,tel_no,im_no

索引慎用字段,需要進行資料分布及使用場景詳細評估

日期gmt_create,gmt_modified

年月year,month

狀態標誌

product_status,order_status,is_delete,vip_flag

型別order_type,image_type,gender,currency_type

區域country,province,city

操作人員

creator,auditor

數值level,amount,score

長字元address,company_name,summary,subject

不適合建索引的字段

描述備註

description,remark,memo,detail

大字段file_content,email_content

二、如何正確的使用索引

1、避免在where 子句中對字段進行is null 判斷,這樣將使引擎放棄使用索引而是全表掃瞄資料

2、避免在where子句中對字段進行不等潘丹(<>、 !=),否則同樣使用引擎全表掃瞄

3、避免在where子句中對字段進行or,in 判斷,同樣導致引擎全表掃瞄資料

建議使用union代替,如下例子,前提是code是索引

不建議使用的語句:select id from student where code = '000012' or code = '000015'

建議使用的語句: select id from student where code = '000012' union all select id from student where code = '000015'

4、避免在where 子句中對字段進行not in,not exists 的判斷,同樣導致索引失效

5、避免在where子句中對字段進行表示式操作(函式演算法計算),同樣導致索引失效

例如:select id from student where datediff(sysdate,createdate) > 30

select id from student where col/2 =15

6、使用like時,避免使用非字母開頭檢索

例如:select id from student where name like '%王%' 應該使用select id from student where name like '王%'

7、在使用索引字段作為條件時,如果該索引是復合索引,那麼必須使用到該索引中的第乙個字段作為條件時才能保證系統使用該索引,否則該索引將不會被使用,並且應盡可能的讓查詢字段順序與索引順序相一致。

ps:上邊標註紅色的第三條為五六年前資料庫執行的標準,現在資料庫一般都支援對in 或者 or 的索引查詢。

針對資料庫索引的優化

本文主要對索引的建立及使用做具體描述,至於為什麼要使用索引 使用索引帶來哪些好處 索引的分類等內容這裡不再贅述,如果想知道請參考相關文件。一 如何正確的建立索引 1 對主鍵 外來鍵 建立索引 由於開發中經常通過主鍵或者外來鍵去查詢某條或者多條記錄,所以需要對主鍵 外來鍵建立索引 2 對於經常出現在查...

zabbix針對資料庫的監控

2.對於percona的監控 2.2 配置agent端 2.3 配置zabbix監控頁面 檢視cat etc zabbix zabbix agentd.d userparameter mysql.conf配置檔案,可知道zabbix連線資料庫時使用的是mysql和mysqladmin兩個命令,為可以...

對資料庫索引的理解?

資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。索引的原理,對要查詢的字段建立索引其實就是把該字段按照一定的方式排序,建立的索引只對該字段有用,如果查詢的字段改變,那麼這個索引也就無效了。比如,圖書館的書是按照書名的第乙個字母排序的,如果你想要找作者叫張三的就不...