MySQL SQL語句優化explain關鍵字

2021-10-04 08:44:25 字數 2341 閱讀 9880

explain

select

*from

score

where

cno =

'3-105'

and degree >

(select

degree

from

score

where

sno =

109)

id

select_type

table

type

possible_keys

keykey_len

refrows

extra

1primary

score

allnull

null

null

null

12using where

2subquery

score

allnull

null

null

null

12using where

id相同時,執行順序由上至下

id不同時,如果是子查詢,序號id會遞增,id值越大優先順序越高,越先被執行,在所有組中,id值越大優先順序越高

******簡單查詢,不包含子查詢

primary:包含子查詢,為最外層查詢

subquery:子查詢

derived:衍生表,虛擬表

union:出現union關鍵字

union select:在union結果中查詢

type型別從最好到最差

system > const > eq_ref > ref > range >index > all

system:表中只有一條記錄(等於系統表),這是const型別的特例,平時不會出現,這個可以忽略不計。

const:表示通過索引一次就找到了,const用於比較primary key或者union索引,因為只匹配一行資料,所以很快,如將主鍵置於where中。

eq_ref:唯一性索引掃瞄,對於每個索引鍵,表中只有一條記錄與之匹配。常見主鍵或者唯一索引掃瞄

ref:非唯一索引掃瞄,返回匹配條件的所有行。本質上也是一種索引,他返回所有匹配某個單獨值得所有行,然而,他可能會找到多個符合條件得行,所以他應該屬於查詢和掃瞄得混合體。

range:只檢索給定範圍的行,使用索引來選擇行。key列顯示使用了哪些索引,一般就在你的where語句**現了between、<、>、in等查詢,這種範圍掃瞄比全表掃瞄要好,因為它只需要開始於索引的某乙個點,而結束於某乙個點,不用全表掃瞄。

index:full index scan,indexall的區別為index型別只遍歷索引樹。這通常比all快,因為索引檔案通常比資料檔案小(也就是說雖然allindex都是全表掃瞄,但是index是從索引檔案中進行掃瞄,all是通過硬碟中讀取的)

all:全表掃瞄

using filesort:說明mysql會對資料使用乙個外部的索引排序,而不是按照表內索引進行讀取。mysql中無法利用索引完成排序操作稱之為檔案排序。如果出現這種情況,查詢將會非常的慢

using temporary:說明使用臨時表儲存中間結果,mysql在對查詢結果進行排序時,使用臨時表。常見於排序order bygroup by。出現這種情況查詢會非常慢。

using index:表示相應的select操作中使用覆蓋索引(covering index),避免訪問資料行,效率很好!如果同時出現using where,表明索引被用來執行索引值查詢;如果沒有同時出現using where,表明索引用來讀取非執行查詢動作。

using where:使用where關鍵字查詢

impossible where:子句的值總的false,不能用來獲取任何元組

MySQL SQL語句優化

檢視表定義 show create table users 檢視表的索引 show index from users 你要獲取第乙個表的所有資訊,你說全表掃瞄快呢還是索引掃瞄快呢?所以當你查詢庫 包括left join中的臨時庫 的所有資訊時,資料庫會選擇最優方法 全表掃瞄!s表dept id na...

MySQL SQL 語句優化方法

對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引.導致索引失效的操作 應盡量避免在 where 子句中使用 或 操作符,否則將引擎放棄使用索引而進行全表掃瞄.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引...

MySQL SQL語句和索引優化

索引優化 2.合理使用索引 慢查詢explain關鍵字 子查詢 select from customerinfo where customerid notin select customerid from salesinfo 連線查詢 select from customerinfo left jo...