SQL優化 MySQL版 - 索引分類、創建方式、刪除索引、查看索引、SQL性能問題


SQL優化 MySQL版  - 索引分類、創建方式、刪除索引、查看索引、SQL性能問題

作者 Stanley 羅昊

轉載請注明出處和署名,謝謝!

索引分類

單值索引

的意思就是單列的值,比如說有一張數據庫表,表內有三個字段,分別是 id name age,我給age這個字段加一個索引,這就是單值索引,因為只有age這一列是索引;

一個表可以有多個單值索引,我不光可以設置age,我也可以吧name設置成索引,或許更多

唯一索引

顧名思義,就是不能重復,比如age就不能被設置為唯一索引,因為年齡肯定是不唯一的,小明18歲,有可能小李也是18歲,這就重復了,所以age這一列不能被設置成唯一索引;

一般唯一索引就是Id;

復合索引

由多個列構成,相當於書的二級目錄,比如我找“趙”這個字,它就先去Z里面找,然后再去zhao里面去找,找兩次;

這個時候我把name跟age它兩個共同組成一個復合索引,意思就是,我先根據name找人,如果名字重復了,我再根據age去找;

復合索引不一定必須兩個列在一起使用,比如找李四,這個表里面就一個李四,就沒有必要再去找age進行篩選;

創建索引的方式一

語法:careate 索引類型 索引名 on 表 (字段)//你現在在給那張表的那個字段加索引

創建單值索引

單值索引索引類型就是index;

careate index dept_index on tb(dept)

講解:我要根據部門進行查詢所以我就給部門加一個單值索引,dept_index就是我起的名字,dept就是部門的意思,名字可以隨便起,但是要有意義,on后面跟上表名,我的數據庫的這張表是tb,所以我寫tb,括號里面寫字段名;

創建唯一索引

careate  unique index name_index on tb (name)

講解:unique 與 index 都是索引類型,這里我們就假設name是唯一的,創建方法跟上面一樣,無非就多加了一個unique,去掉unique就是單值索引;

創建復合索引

careate  index dept_name_index on tb tb(dept,name);//程序會自動檢測,如果你后面參數只有一個,那就判定你為單值,如果是一個以上,就判定你是復合!

講解:我現在假設dept跟name這倆字段復合,我現在查詢一個人的時候,先看他是哪個部門的(dept)如果大家都是開發部門的,那我再根據名字找,如果你不是開發部門的,那我我就直接找到了,就兩次截然查詢,也就是先根據部門,再根據名字;

創建索引的方式二

語法:alter table 表名 索引類型 索引名(字段)

創建單值索引

alter table tb add index dept_index(dept);

講解:add就表示給tb這張表添加一個為index類型的索引,並起名為dept_index,要被加的字段是dept;

創建唯一索引

alter table tb add unique index name_index(name)

 

講解:照貓畫虎,跟上放基本一致,假設name字段是唯一不可重復

 

創建復合索引

alter table tb add index dept_name_index(dept,name)

講解:先dept就是先根據dept查,再去根據name查,這個順序是有意義的!

值得注意的是,兩個創建方式的效果是一樣的,任選其一,均不需要事物的提交(commit),因為兩者都是DDL語句,程序遇到DDL會自動提交,但是你寫了也不報錯,就是什么也沒提交而已;

事物只對DML語句進行操作,也就是增刪改操作,這個需要理解!

注意:

如果一個字段是primary key(主鍵),則該字段默認就是主鍵索引,即便你沒有給他加索引,他也是主鍵索引!

主鍵索引與唯一索引基本相似,區別就是,值不能為Null,而唯一索引可以!

主鍵索引:值不能重復 值不能為null

唯一索引:值不能重復 值可以為null

刪除索引

語法:drop index 索引名 on 表名;

drop index name_index on tb;

講解,我要刪除的索引名字為name_index on 它屬於 tb 表

查詢索引

語法:show index from tb;

解析,看一下tb這張表的索引;

SQL性能問題

1.分析SQSL的執行計划

通過explain,可以模擬SQL優化器執行SQL語句,從而讓開發人員知道自己編寫的狀況;

查詢執行計划:explain+SQL語句;

舉例:explain select * From bbs_detail,看一下執行結果:

我會在下篇文章詳細介紹並且實戰優化,在這里各位僅做了解即可;

解說:

id:顧名思義就是查詢編號

select_type:查詢類型

table:你在操作哪一張表

type:類型

key:實際使用的索引,你到底用了哪些索引

possible_keys:預測你用到了哪些索引,假設你用了八個索引,它這里就會顯示八個,但是實際有效的只有五個,所以在key顯示就是五個!

key_len:實際使用索引的長度;

ref:表和表之間的引用關系;

rows:通過索引查詢到的數據量;

Extra:額外的優化信息

2.MySQL查詢優化器會干擾我們的優化

我在前幾章說過有關為什么會干擾我們優化好的SQL語句,因為它內置有一個優化器,它會擅自篡改我們優化好的SQL語句;

今日感悟:

自利偏差告訴我們:

    人在失敗時會把原因歸結到別人身上,

       成功時更傾向把勞務歸於自己,

    印象管理告訴我們:

     人在別人的面前,

       會不知不覺地進行自我表演。

        決斷效應告訴我們:

         人在選擇以后,會通過自我說服,來讓自己相信自己的選擇是最好的

      自我確定理論告訴我們:

             人一般會喜歡和自己相似的人,這里面的愛,包含了對自己的肯定

               學習心理學,自己能更好的了解自己,並理解他人;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM