一、原始的SQL

1、说明  csm_001.sale_bill 

1)表在字段 order_state 、update_time  有联合索引

2)表不走上面的联合索引,走全表扫描

3)表的数据量约400万,数据库版本5.6

2、原始SQL如下

SELECT DATE_FORMAT(update_time, '%Y%m%d%H%i%S') AS update_time, bill_type, bill_number

FROM csm_001.sale_bill

WHERE update_time >= '2024-02-29 18:19:15'

AND order_state = 2

AND update_time <= '2024-02-29 18:59:59'

ORDER BY update_time LIMIT 0, 500;

二、优化分析

1、SQL改写

通过表的id快速取数据的特性

SELECT DATE_FORMAT(`sale_bill`.`update_time`, '%Y%m%d%H%i%S') AS `update_time`, `sale_bill`.`bill_type`, `sale_bill`.`bill_number`

FROM `csm_001`.`sale_bill`

INNER JOIN

( SELECT `id` FROM `csm_001`.`sale_bill` WHERE `update_time` >= '2024-02-29 18:19:15' AND `order_state` = 2 AND `update_time` <= '2024-02-29 18:59:59' ORDER BY `update_time` LIMIT 0, 500 )

`tmp_0` USING (`id`)

 posted on 2024-03-07 19:22  xibuhaohao  阅读(13)  评论(0)    收藏  举报