このクエリを使用して、{小文字の「a」で始まる名前のクライアント}のすべての従業員を取得しています。
SELECT * FROM employees
WHERE client_id IN (SELECT id FROM clients WHERE name LIKE 'a%')
列employees.client_id
はintであり、INDEX client_id (index_id)
。サブクエリは、IDのリストをIMHOが返す必要があります。これは、WHERE句で使用されます。
クエリをEXPLAIN
実行すると、プライマリクエリはインデックスを使用しません(type:ALL
)。しかし、サブクエリ(たとえば)EXPLAIN
から取得したリストを実行すると、に切り替わり、このクエリは50%高速になります。SELECT ... WHERE client_id IN (121,184,501)
EXPLAIN
type:range
サブクエリによって返されるデータのインデックスをクエリに使用させるにはどうすればよいですか?または、このデータを取得するためのより効率的な方法はありますか?(IDリストをアプリケーションサーバーに取得し、それに参加して2番目のクエリを送信すると、ここではさらにコストがかかります)。
前もって感謝します。