1. 程式人生 > >mysql 反思一 (windows常用命令)

mysql 反思一 (windows常用命令)

最近對mysql 的索引想深入的瞭解一下,於是乎就寫了個這。

1.使用場景描述:有些公司線上不能直接用資料庫工具連線,因為沒有暴露出外部連結的介面,於是乎我們只能通過跳板機登入上伺服器在連線上想要連線的資料庫。

2.首先是登入mysql:

   先進入mysql 的命令小工具的目錄下輸入:mysql -hlocalhost -uroot -proot,於是乎就登陸了。

其次檢視資料庫:show database;

還有選擇資料庫:use db_o2m;

顯示資料庫的表: 

sql 的執行計劃: explain select * from user where id = 1 limit 10\G;

我們主要是看  possible_keys 和 key 就可以看出這是主鍵索引。

下面是個欄位的說明:

2)、select_type列常見的有:

A:simple:表示不需要union操作或者不包含子查詢的簡單select查詢。有連線查詢時,外層的查詢為simple,且只有一個

B:primary:一個需要union操作或者含有子查詢的select,位於最外層的單位查詢的select_type即為primary。且只有一個

3)、table

顯示的查詢表名,如果查詢使用了別名,那麼這裡顯示的是別名,如果不涉及對資料表的操作,那麼這顯示為null,如果顯示為尖括號括起來的<derived N>就表示這個是臨時表,後邊的N就是執行計劃中的id,表示結果來自於這個查詢產生。如果是尖括號括起來的<union M,N>,與<derived N>類似,也是一個臨時表,表示這個結果來自於union查詢的id為M,N的結果集。

4)、type

A:system:表中只有一行資料或者是空表,且只能用於myisam和memory表。如果是Innodb引擎表,type列在這個情況通常都是all或者index

B:const:使用唯一索引或者主鍵,返回記錄一定是1行記錄的等值where條件時,通常type是const。其他資料庫也叫做唯一索引掃描

5)、possible_keys

查詢可能使用到的索引都會在這裡列出來

6)、key

查詢真正使用到的索引,select_type為index_merge時,這裡可能出現兩個以上的索引,其他的select_type這裡只會出現一個。

7)、key_len

用於處理查詢的索引長度,如果是單列索引,那就整個索引長度算進去,如果是多列索引,那麼查詢不一定都能使用到所有的列,具體使用到了多少個列的索引,這裡就會計算進去,沒有使用到的列,這裡不會計算進去。留意下這個列的值,算一下你的多列索引總長度就知道有沒有使用到所有的列了。要注意,mysql的ICP特性使用到的索引不會計入其中。另外,key_len只計算where條件用到的索引長度,而排序和分組就算用到了索引

,也不會計算到key_len中。

8)、ref

如果是使用的常數等值查詢,這裡會顯示const,如果是連線查詢,被驅動表的執行計劃這裡會顯示驅動表的關聯欄位,如果是條件使用了表示式或者函式,或者條件列發生了內部隱式轉換,這裡可能顯示為func

9)、rows

這裡是執行計劃中估算的掃描行數,不是精確值

10)、extra

這個列可以顯示的資訊非常多,有幾十種。

11)、filtered

使用explain extended時會出現這個列,5.7之後的版本預設就有這個欄位,不需要使用explain extended了。這個欄位表示儲存引擎返回的資料在server層過濾後,剩下多少滿足查詢的記錄數量的比例,注意是百分比,不是具體記錄數。