我正在使用此查询来获取 {clients 的所有员工,其名称以小写“a”开头}:
SELECT * FROM employees
WHERE client_id IN (SELECT id FROM clients WHERE name LIKE 'a%')
Columnemployees.client_id
是一个 int,带有INDEX client_id (index_id)
. 恕我直言,子查询应该返回一个 id-s 列表,然后在 WHERE 子句中使用。
当我EXPLAIN
查询时,主查询不使用索引(type:ALL
)。但是,当我EXPLAIN
从子查询(例如SELECT ... WHERE client_id IN (121,184,501)
)中获取一个列表时,EXPLAIN
切换到type:range
,并且该查询的速度提高了 50%。
如何使查询使用子查询返回的数据的索引 - 或者,是否有更有效的方法来检索这些数据?(将 id-list 检索到应用程序服务器,加入它并发送第二个查询在这里更加昂贵)。
提前致谢。