資料庫 Mysql裡的Explain說明

2023-01-21 01:56:05 字數 3707 閱讀 2405

下面是對explain的具體說明,也都是官方的,以後進行參考。

id

select識別符。這是select的查詢序列號

select_type

select型別,可以為以下任何一種:

table

輸出的行所引用的表

type

聯接型別。下面給出各種聯接型別,按照從最佳型別到最壞型別進行排序:

possible_keys

指出mysql能使用哪個索引在該表中找到行

key

顯示mysql實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是null。

key_len

顯示mysql決定使用的鍵長度。如果鍵是null,則長度為null。

ref

顯示使用哪個列或常數與key一起從表中選擇行。

rows

顯示mysql認為它執行查詢時必須檢查的行數。多行之間的資料相乘可以估算要處理的行數。

filtered

顯示了通過條件過濾出的行數的百分比估計值。

extra

該列包含mysql解決查詢的詳細資訊

not exists:mysql能夠對查詢進行left join優化,發現1個匹配left join標準的行後,不再為前面的的行組合在該表內檢查更多的行。

range checked for each record (index map: #):mysql沒有發現好的可以使用的索引,但發現如果來自前面的表的列值已知,可能部分索引可以使用。

using filesort:mysql需要額外的一次傳遞,以找出如何按排序順序檢索行。

using index:從只使用索引樹中的資訊而不需要進一步搜尋讀取實際的行來檢索表中的列資訊。

using temporary:為了解決查詢,mysql需要建立一個臨時表來容納結果。

using where:where 子句用於限制哪一個行匹配下一個表或傳送到客戶。

using sort_union(...), using union(...), using intersect(...):這些函式說明如何為index_merge聯接型別合併索引掃描。

using index for group-by:類似於訪問表的using index方式,using index for group-by表示mysql發現了一個索引,可以用來查 詢group by或distinct查詢的所有列,而不要額外搜尋硬碟訪問實際的表。

type:這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const、eq_reg、ref、range、index和all

type顯示的是訪問型別,是較為重要的一個指標,結果值從好到壞依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all

一般來說,得保證查詢至少達到range級別,最好能達到ref。

我們在進行條件查詢時,建議使用索引,否則將引起全表掃描,io的開銷和程式的效能都沒法保證!

下面是對explain的具體說明,也都是官方的,以後進行參考。

id

select識別符。這是select的查詢序列號

select_type

select型別,可以為以下任何一種:

table

輸出的行所引用的表

type

聯接型別。下面給出各種聯接型別,按照從最佳型別到最壞型別進行排序:

possible_keys

指出mysql能使用哪個索引在該表中找到行

key

顯示mysql實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是null。

key_len

顯示mysql決定使用的鍵長度。如果鍵是null,則長度為null。

ref

顯示使用哪個列或常數與key一起從表中選擇行。

rows

顯示mysql認為它執行查詢時必須檢查的行數。多行之間的資料相乘可以估算要處理的行數。

filtered

顯示了通過條件過濾出的行數的百分比估計值。

extra

該列包含mysql解決查詢的詳細資訊

not exists:mysql能夠對查詢進行left join優化,發現1個匹配left join標準的行後,不再為前面的的行組合在該表內檢查更多的行。

range checked for each record (index map: #):mysql沒有發現好的可以使用的索引,但發現如果來自前面的表的列值已知,可能部分索引可以使用。

using filesort:mysql需要額外的一次傳遞,以找出如何按排序順序檢索行。

using index:從只使用索引樹中的資訊而不需要進一步搜尋讀取實際的行來檢索表中的列資訊。

using temporary:為了解決查詢,mysql需要建立一個臨時表來容納結果。

using where:where 子句用於限制哪一個行匹配下一個表或傳送到客戶。

using sort_union(...), using union(...), using intersect(...):這些函式說明如何為index_merge聯接型別合併索引掃描。

using index for group-by:類似於訪問表的using index方式,using index for group-by表示mysql發現了一個索引,可以用來查 詢group by或distinct查詢的所有列,而不要額外搜尋硬碟訪問實際的表。

type:這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const、eq_reg、ref、range、index和all

type顯示的是訪問型別,是較為重要的一個指標,結果值從好到壞依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all

一般來說,得保證查詢至少達到range級別,最好能達到ref。

我們在進行條件查詢時,建議使用索引,否則將引起全表掃描,io的開銷和程式的效能都沒法保證!

mysql改表裡資料庫 MYSQL修改表操作

1.登入資料庫 mysql h localhost u root p 資料庫名稱 2.查詢所有的資料庫 show databases 3.選擇資料庫 use 資料庫名 4.查詢所有資料表 show tables 5.查詢表的欄位資訊 desc 表名稱 6.1.修改某個表的欄位型別及指定為空或非空 a...

mysql裡的資料庫引擎, 編碼格式

針對資料庫裡即使設定了varchar型別的欄位,值輸入中文報錯的情況,是因為資料庫的預設編碼型別不支援漢字輸入.utf 8 可以編譯全球通用的所有語言符號.由1 6個可變位元組組成,有非常嚴格的排列規則,能夠快速準確的完成編譯.在mysql裡,utf 8被寫成utf8,不是預設編碼格式,需要在wor...

C C ,往MySQL資料庫裡插入中文顯示亂碼

1.先上圖一張,看看什麼是亂碼 2.理解一下vc 中的字串編碼 在以前vc 6.0中預設的字符集是多位元組字符集 mbcs multi byte character set 而vs2005及以後預設的字符集是unicode,這樣導致以前在vc6.0中非常簡單實用的各類字元操作和函式在vs2010環境...