MySQL中的Filtered是一個(gè)關(guān)鍵詞,它通常出現(xiàn)在在查詢執(zhí)行計(jì)劃(explain)中。Filtered指標(biāo)表示查詢結(jié)果集被條件過濾的百分比。
EXPLAIN SELECT * FROM users WHERE age >20;
執(zhí)行以上查詢的explain語句,會(huì)得到一個(gè)result中包含一個(gè)Filtered列。例如:
id select_type table type possible_keys key key_len ref rows Extra filtered 1 SIMPLE users ALL NULL NULL NULL NULL 1000 NULL 30.00
在這個(gè)例子中,F(xiàn)iltered指標(biāo)的數(shù)值是30.00。這意味著age >20條件過濾了結(jié)果集中的30.00%的數(shù)據(jù)。
Filtered指標(biāo)對優(yōu)化查詢非常重要,因?yàn)樗嬖V我們哪些條件被應(yīng)用到了查詢中,并且它們對查詢結(jié)果的影響有多大。Filtered指標(biāo)還可以用來優(yōu)化索引,因?yàn)橹麈I和其他列的條件過濾器的效果不同。
EXPLAIN SELECT * FROM users WHERE username LIKE 'a%';
當(dāng)查詢中使用LIKE運(yùn)算符時(shí),過濾效果與條件的位置和范圍有關(guān)。例如,如果第一個(gè)字符是“a”,查詢結(jié)果集將被條件過濾的比較嚴(yán)格,F(xiàn)iltered指標(biāo)可能高達(dá)90%以上。但是,如果條件適用于前幾個(gè)字符,結(jié)果集的過濾效果就會(huì)下降。
最后提醒,F(xiàn)iltered指標(biāo)只是一個(gè)估計(jì)值,實(shí)際情況會(huì)隨著數(shù)據(jù)的變化而變化。但是,使用這個(gè)指標(biāo)來評估查詢性能和改進(jìn)查詢效率是非常有幫助的。