一个多表关联的sql,能够返回140条数据,不加 limit 耗时10秒钟,加上limit 100仅
耗时 0.5秒,sql有Order by,如果有排序不应该查出全部数据后才执行limit吗,求教大神原理。sql如下
SELECT
sale.id,
sale.sale_no,
sale.express_no,
sale.thermometer_return,
sale.num,
sale.weight,
r.id AS "r.receiver_id",
r.receive_company,
r.receive_address,
r.receive_mobile,
r.receive_name
FROM
(
SELECT
sdr.sale_id
FROM
dis_distribution_warehouse_relation dwr,
dis_sale_distribution_relation sdr
WHERE
sdr.distribution_id = dwr.distribution_id
AND dwr.warehouse_id = '021aa21cc9204bd7bcb9d1ad0d271141'
AND dwr.status
= 1
AND sdr.sale_id NOT IN (
SELECT
sdr1.sale_id
FROM
dis_distribution_warehouse_relation dwr1
JOIN dis_sale_distribution_relation sdr1 ON sdr1.distribution_id = dwr1.distribution_id
WHERE
dwr1.status
= 0
AND dwr1.warehouse_id = '021aa21cc9204bd7bcb9d1ad0d271141'
)
) m STRAIGHT_JOIN order_sale sale ON m.sale_id = sale.id
AND sale.status
= '1'
AND sale.carrier_id = '23b40f744e954567ac2ab6caa79ef8e8'
LEFT JOIN order_receiver r ON r.id = sale.receiver_id
ORDER BY
sale.create_date DESC
LIMIT 100
mysql查询优化,加上limit 关键字速度快了很多
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
5条回答 默认 最新
- doggy_coder 2017-11-16 01:14关注
使用limit时,当扫描到足够的行数时,就停止进行扫描了。例如limit m,n,在有足够的数据行能够被扫描的情况下,那么会先扫描m行被丢弃,然后再扫描n行作为结果,一共扫描m+n行。所以当你的m很大时,一样慢。
解决 3无用
悬赏问题
- ¥100 Jenkins自动化部署—悬赏100元
- ¥15 关于#python#的问题:求帮写python代码
- ¥20 MATLAB画图图形出现上下震荡的线条
- ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
- ¥15 perl MISA分析p3_in脚本出错
- ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
- ¥15 ubuntu虚拟机打包apk错误
- ¥199 rust编程架构设计的方案 有偿
- ¥15 回答4f系统的像差计算
- ¥15 java如何提取出pdf里的文字?