【发布时间】:2016-04-18 17:19:03
【问题描述】:
我有一个 MySql 查询
SELECT TE.company_id,
SUM(TE.debit- TE.credit) As summation
FROM Transactions T JOIN Transaction_E TE2
ON (T.parent_id = TE2.transaction_id)
JOIN Transaction_E TE
ON (TE.transaction_id = T.id AND TE.company_id IS NOT NULL)
JOIN Accounts A
ON (TE2.account_id=A.id AND A.deactivated_timestamp=0)
WHERE (TE.company_id IN (1,2))
AND A.user_id=2341 GROUP BY TE.company_id;
当我解释查询时,它的计划就像(总结):
| Select type | table | type | rows |
-------------------------------------
| SIMPLE | A | ref | 2 |
| SIMPLE | TE2 | ref | 17 |
| SIMPLE | T | ref | 1 |
| SIMPLE | TE | ref | 1 |
但是,如果我对同一个查询(而不是 SUM(..) )执行 count(*),那么它表明特定 company_id 有大约 40k 行。我不明白为什么查询计划显示扫描的行数如此之少,而至少有 40k 行正在处理。查询计划中的 rows 列代表什么?它不代表该表中处理的行数吗?在那种情况下,它最多应该是 2*17*1*1 = 34 行?
【问题讨论】:
标签: mysql sql performance