版本4.3.5;一个SQL执行非常慢,求优化

SELECT
*
FROM
aaams_chargeeee
WHERE
order_time < 1774800000
AND (
(order_time > 1774719636)
OR (
order_time = 1774719636
AND id > 7888888779990138338
)
)
AND model_id = ‘a00012301ca8e5e’
AND aaams_chargeeee.deleted_at IS NULL
ORDER BY
order_time ASC,
id ASC
LIMIT
10000;

5 个赞

估计是or算子导致的性能,可以试试如下等价改写:

SELECT *
FROM aaams_chargeeee
WHERE (
( order_time < 1774800000 and order_time > 1774719636 )
or
( order_time = 1774719636 AND id > 7888888779990138338 )
)
AND model_id = ‘a00012301ca8e5e’
AND aaams_chargeeee.deleted_at IS NULL
ORDER BY order_time ASC, id ASC LIMIT 10000;

6 个赞

试了,改了后,1秒多就出来了,非常感谢!

1 个赞

高手啊,学习了,楼主写的SQL看起来是怪怪的。

1 个赞

SQL写得真好,学习了。

limit要走排序的,不知道限制字段有没有索引啊