今天我注意到EXPLAIN
声明中的“新”额外类型。
这是我的查询
SELECT UrlId,'61','Australia'
FROM dbase.phonenumbers
WHERE UrlId IN (SELECT UrlId FROM dbase.phonenumbers
WHERE PhoneNumber LIKE '+31%')
AND PhoneNumber LIKE '+61%'
EXPLAIN给出了这个,
phonenumbers range UrlId_PhoneNumber,PhoneNumber PhoneNumber 12 4176 Using where
phonenumbers ref UrlId_PhoneNumber,PhoneNumber UrlId_PhoneNumber 4 dbase.phonenumbers.UrlId 4 Using where; Using index; FirstMatch(phonenumbers)
FirstMatch(phonenumbers)
究竟是什么意思?我以前从未见过它,也找不到足够快速解释它的东西。
答案 0 :(得分:2)
这是一种策略,可以在找到第一个真正的匹配后立即通过快速执行来避免重复产生。
所以FirstMatch(phonenumbers)
意味着只要我们生成了一个匹配的记录组合,它就会缩短执行时间并跳回phonenumbers
表。
- FirstMatch策略的工作原理是执行子查询并在找到第一个匹配项后立即执行。[/ li>
- 这意味着,子查询表必须位于从子查询谓词引用的所有父选择表之后。
- EXPLAIN将FirstMatch显示为“FirstMatch(tableN)”。
- 该策略可以处理相关的子查询。
- 但如果子查询具有有意义的GROUP BY和/或聚合函数,则无法应用它。
- 使用optimizer_switch变量中的firstmatch = on | off标志控制FirstMatch策略的使用。