php - このMySQL外部選択がクエリの速度を低下させる理由を理解する
CompaniesテーブルとZipcodesテーブルがあり、追加の処理を適用する前に、companyIDの最も美しいサブセットを取得したいと考えています。そのため、多くの場合、これを内部選択に置き、WHERE条件でcompanyIDを取得してから、外部で何らかの集計または計算(距離計算など)を実行します。
何らかの理由で、内部クエリが非常に高速であるのに、なぜこの外部SELECTが低速であるのか理解できません。
内側のJOINと関係があることは知っています。削除すると問題が解決するため。どういうわけかMySQLはテーブルを導出しています...
SELECT _i1.companyID FROM (
SELECT companyID
FROM Companies
JOIN Zipcodes ON Zipcodes.zipcode = Companies.companyZipcode
WHERE Companies.companyType = 'plumbing'
) _i1
時間:0.8秒
外部クエリなし:.00x秒
Zipcodes.zipcode
、Companies.companyZipcode
、Companies.companyType
にインデックスがあり、Companies.companyID
が主キーです。
EXPLAINを実行すると、外部クエリによってMySQLのselect_typeがSimpleではなくDerivedになることがわかります。
サブクエリがある場合、一時テーブルを作成し、そこにデータを挿入する必要があります。