最初のクエリで、mysqlはmdl_enrol
からサブセットを選択する必要があります テーブルと完了 mdl_user_enrolments
およびmdl_userdata
メモリに。したがって、メモリ内の大量のデータを選択します。それを行った後、データを結合します。データが結合されてクライアントに返送されるまで、すべてのデータを配置するのに十分なメモリがない場合は、ハードドライブに一時テーブルが作成されます。ほとんどの場合、mysqlオプティマイザは、間違いを修正して実行プランを改善しようとするほどクールではありません。だから遅いです。
一方、2番目のクエリでは、mysqlは正確に何を選択する必要があるかを認識しており、必要なデータの少量のみを選択します。このシナリオでは、インデックスを使用できます(必要なすべてのインデックスが作成されていることを前提としています)。だから速いです。