php - このMySQL外部選択がクエリの速度を低下させる理由を理解する

原文 php mysql sql subquery

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.zipcodeCompanies.companyZipcodeCompanies.companyTypeにインデックスがあり、Companies.companyIDが主キーです。

EXPLAINを実行すると、外部クエリによってMySQLのselect_typeがSimpleではなくDerivedになることがわかります。
答え
サブクエリがある場合、一時テーブルを作成し、そこにデータを挿入する必要があります。
関連記事

php - Modxのユーザー拡張フィールドにデフォルト値を設定する

php - PHP / MySQLiの複数のSQLオブジェクト

php - CentOSにPHP FileInfoモジュールをインストールする方法

php - データベースから取得した文字列Null

php - HtmlPurifierBundle config.yml Symfony2でURI.SafeIframeRegexpを構成する方法

php - mysqlはローカルdbプロジェクトのスキーマを使用して、phpで新しいdbを作成するときにdb構造を作成します

php - Functions.phpでメニューCSSワードプレスをオーバーライドする

php - Laravelブレードテンプレートを使用してJSONコンテンツをループする正しい方法?

php - WPパンくずリストに「カテゴリ」を追加したい

php - ajax post request content-type application / formdata vs application / jsonのJSON文字列