SQL语句使用Order By

时间:2019-01-12 09:01:01

标签: mysql sql

我在下面有此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慢。但是,这两者都会使其变得非常非常缓慢。

使订单更快的最佳方法是什么?

1 个答案:

答案 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

相关问题