【发布时间】:2015-06-03 12:53:55
【问题描述】:
我有一个如下所示的 SQL 查询。
SELECT A.a, count(B.id)
FROM TableA A inner join TableA B on A.referId = B.id
WHERE A.id in (123,2424,232...)
GROUP BY A.id
执行此查询时
- 首先使用 where 子句过滤行,然后执行连接或
- 先执行连接,然后过滤行?
我在 MySQL 服务器上运行这个查询。假设 TableA 包含百万行。是否有任何替代且有效的方式来编写此查询?
【问题讨论】:
-
有参考吗?
-
视情况而定。优化器应该根据数据量、键等选择最快的方式。
-
@MichaelBerkowski,这是一个自我加入
-
@RaviChandra 我现在看到了 :)。
referId上有索引吗?我假设id有一个索引。 -
我们在referId 上没有索引。创建一个将有助于提高性能?
标签: mysql sql performance query-optimization