以下查询速度比较慢(大约0.7秒,6千行左右)。
SELECT items.*, COUNT(transactions.ID)
FROM items
INNER JOIN users ON (items.USER = users.ID)
LEFT JOIN transactions ON (items.id = transactions.item)
WHERE items.ACTIVE = 1
AND items.DELETED_AT IS NULL
GROUP BY items.ID
ORDER BY items.DATE DESC
LIMIT 20
当按照items.ID DESC而非items.DATE排序时,速度会显著加快。交易连接到一个大表(约250k行),是一对多的关系。日期列有索引。
有没有通用的方法来提高ORDER BY的性能?
编辑:items.user、transactions.item和items.date上都有索引。Items有49个列,users有76个,transactions有17个。
GROUP BY
中包含items.DATE
吗?(而且要放在第一个位置)? - Andriy M