SQL 排序查询优化

优化前

mysql> explain SELECT ROADMONITORID_,TRAFFICID_,PLATENUMBER_,PASSTIME_,SPEED_,PLATECOLOR_ FROM hadoop_firstinto 
    -> WHERE PASSTIME_>='2015-01-23 13:59:16' AND PASSTIME_<='2015-10-23 13:59:16' AND backType_='6'
    -> ORDER BY PASSTIME_ DESC,PLATENUMBER_ ASC LIMIT 0,100;
+----+-------------+------------------+------+-----------------+---------+---------+-------+----------+-----------------------------+
| id | select_type | table            | type | possible_keys   | key     | key_len | ref   | rows     | Extra                       |
+----+-------------+------------------+------+-----------------+---------+---------+-------+----------+-----------------------------+
|  1 | SIMPLE      | hadoop_firstinto | ref  | index01,index02 | index01 | 5       | const | 12300119 | Using where; Using filesort |
+----+-------------+------------------+------+-----------------+---------+---------+-------+----------+-----------------------------+


SELECT ROADMONITORID_,TRAFFICID_,PLATENUMBER_,PASSTIME_,SPEED_,PLATECOLOR_ FROM hadoop_firstinto 
WHERE PASSTIME_>='2015-01-23 13:59:16' AND PASSTIME_<='2015-10-23 13:59:16' AND backType_='6'
ORDER BY PASSTIME_ DESC,PLATENUMBER_ ASC LIMIT 0,100;
....
100 rows in set (50.19 sec)

优化后

mysql> EXPLAIN SELECT ROADMONITORID_,TRAFFICID_,PLATENUMBER_,PASSTIME_,SPEED_,PLATECOLOR_ FROM hadoop_firstinto 
    -> WHERE PASSTIME_>='2015-01-23 13:59:16' AND PASSTIME_<='2015-10-23 13:59:16' AND backType_='6'
    -> ORDER BY PASSTIME_ DESC,PLATENUMBER_ DESC LIMIT 0,100;
+----+-------------+------------------+------+-----------------+---------+---------+-------+----------+-------------+
| id | select_type | table            | type | possible_keys   | key     | key_len | ref   | rows     | Extra       |
+----+-------------+------------------+------+-----------------+---------+---------+-------+----------+-------------+
|  1 | SIMPLE      | hadoop_firstinto | ref  | index01,index02 | index01 | 5       | const | 12300119 | Using where |
+----+-------------+------------------+------+-----------------+---------+---------+-------+----------+-------------+

--优化后查询性能测试
SELECT ROADMONITORID_,TRAFFICID_,PLATENUMBER_,PASSTIME_,SPEED_,PLATECOLOR_ FROM hadoop_firstinto 
WHERE PASSTIME_>='2015-01-23 13:59:16' AND PASSTIME_<='2015-10-23 13:59:16' AND backType_='6'
ORDER BY PASSTIME_ DESC,PLATENUMBER_ DESC LIMIT 0,100;
....
100 rows in set (0.01 sec)

总结:因为同时多个字段不同方向的排序,无法完全利用索引避免排序,所以这里进行了SQL改写,让多个字段的排序升序一致。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值