今天我注意到一个声明中有一个“新”的额外类型。
这是我的问题

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标志控制。

10-04 22:22