我在下面有此sql语句,并在0.149秒内返回:
SELECT Trans.Transid, TransDetail.TransDetailID FROM Trans
LEFT JOIN TransDetail ON Trans.Reference = TransDetail.TransID
LIMIT 1000
我通过添加Order By进行了修改,并将返回速度大大降低了1分钟20秒
SELECT Trans.Transid, TransDetail.TransDetailID FROM Trans
LEFT JOIN TransDetail ON Trans.Reference = TransDetail.TransID
ORDER BY Trans.Transid, TransDetail.TransDetailID
LIMIT 1000
到目前为止,这些是我所做的,但是仍然没有提高速度:
1。)添加了Trans.TransID,Trans.Reference和TransDetail.TransDetailID的索引
2。)尝试将限制设置为偶数1,但返回速度仍然很慢
3。)尝试执行Trans.Transid的ORDER,并在0.223秒内返回
4。)尝试通过TransDetail.TransDetailID执行ORDER,并在48.365秒内返回
仅使用Order by进行TransDetail.TrasnsDetailID比使用Trans.TransID慢。但是,这两者都会使其变得非常非常缓慢。
使订单更快的最佳方法是什么?
答案 0 :(得分:0)
我建议使用2个限制。
首先在最小和最快的桌子上。
然后按左联接的结果。
SELECT tr.Transid, det.TransDetailID
FROM
(
SELECT Transid, Reference
FROM Trans
ORDER BY Transid
LIMIT 1000
) tr
LEFT JOIN TransDetail det ON det.TransID = tr.Reference
ORDER BY tr.Transid, det.TransDetailID
LIMIT 1000
它将受益于子查询的Trans.TransID索引。
但是我还是认为TransID是该表上的主键。
它还将受益于TransDetail.TransID上的索引。
为了加快TransDetail上的联接。
小测试here