今天我注意到一个声明中有一个“新”的额外类型。
这是我的问题
SELECT UrlId,'61','Australia'
FROM dbase.phonenumbers
WHERE UrlId IN (SELECT UrlId FROM dbase.phonenumbers
WHERE PhoneNumber LIKE '+31%')
AND PhoneNumber LIKE '+61%'
解释就说明了这一点,
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)
EXPLAIN
到底是什么意思?我以前从没见过,也找不到足够快的解释。 最佳答案
这是一种策略,一旦找到第一个真正的匹配项,就通过短切执行避免产生重复项。
所以FirstMatch(phonenumbers)
意味着只要我们生成一个匹配的记录组合,它就会缩短执行并跳回phonenumbers
表。
从FirstMatch strategy
first match策略通过执行子查询并在找到第一个匹配项时缩短其执行时间来工作。
这意味着,子查询表必须位于从子查询谓词引用的所有父select表之后。
EXPLAIN将FirstMatch显示为“FirstMatch(tableN)”。
该策略可以处理相关的子查询。
但如果子查询具有有意义的GROUP BY和/或聚合函数,则无法应用此函数。
FirstMatch策略的使用由优化器开关变量中的FirstMatch=on | off标志控制。