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,index
和all
的區別為index
型別只遍歷索引樹。這通常比all
快,因為索引檔案通常比資料檔案小(也就是說雖然all
和index
都是全表掃瞄,但是index
是從索引檔案中進行掃瞄,all
是通過硬碟中讀取的)
all
:全表掃瞄
using filesort
:說明mysql會對資料使用乙個外部的索引排序,而不是按照表內索引進行讀取。mysql中無法利用索引完成排序操作稱之為檔案排序
。如果出現這種情況,查詢將會非常的慢
using temporary
:說明使用臨時表儲存中間結果,mysql在對查詢結果進行排序時,使用臨時表。常見於排序order by
和group 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...