mysql优化max()函数

查看表结构: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> show  create  table  coupon_use_test \G
*************************** 1. row ***************************
        Table : coupon_use_test
Create  Table CREATE  TABLE  `coupon_use_test` (
   `id`  int (11)  NOT  NULL  DEFAULT  '0' ,
   `user_id`  varchar (40)  CHARACTER  SET  utf8  COLLATE  utf8_bin  DEFAULT  NULL ,
   `coupon_code`  varchar (40)  CHARACTER  SET  utf8  COLLATE  utf8_bin  NOT  NULL  DEFAULT  '' ,
   `status`  varchar (2)  CHARACTER  SET  utf8  COLLATE  utf8_bin  DEFAULT  '00' ,
   `use_time` datetime  DEFAULT  NULL ,
   `remark1`  varchar (200)  CHARACTER  SET  utf8  COLLATE  utf8_bin  DEFAULT  NULL ,
   `remark2`  varchar (200)  CHARACTER  SET  utf8  COLLATE  utf8_bin  DEFAULT  NULL ,
   `remark3`  varchar (200)  CHARACTER  SET  utf8  COLLATE  utf8_bin  DEFAULT  NULL ,
   `create_time`  timestamp  NOT  NULL  DEFAULT  CURRENT_TIMESTAMP ,
   `create_user_id`  varchar (128)  CHARACTER  SET  utf8  COLLATE  utf8_bin  DEFAULT  NULL ,
   `update_time`  timestamp  NOT  NULL  DEFAULT  CURRENT_TIMESTAMP  ON  UPDATE  CURRENT_TIMESTAMP
) ENGINE=InnoDB  DEFAULT  CHARSET=utf8
1 row  in  set  (0.00 sec)

测试查询速度: 

1
2
3
4
5
6
7
mysql>  select  max (create_time)  from  coupon_use_test;
+ ---------------------+
max (create_time)    |
+ ---------------------+
| 2016-06-25 16:44:25 |
+ ---------------------+
1 row  in  set  (2.01 sec)

查看执行计划: 

1
2
3
4
5
6
7
mysql> explain  select  max (create_time)  from  coupon_use_test;
+ ----+-------------+-----------------+------------+------+---------------+------+---------+------+---------+----------+-------+
| id | select_type |  table            | partitions | type | possible_keys |  key   | key_len | ref  |  rows     | filtered | Extra |
+ ----+-------------+-----------------+------------+------+---------------+------+---------+------+---------+----------+-------+
|  1 | SIMPLE      | coupon_use_test |  NULL        ALL   NULL           NULL  NULL     NULL  | 1706101 |   100.00 |  NULL   |
+ ----+-------------+-----------------+------------+------+---------------+------+---------+------+---------+----------+-------+
1 row  in  set , 1 warning (0.00 sec)

创建create_time字段索引

1
2
3
mysql>  alter  table  coupon_use_test  add  index  idx_create_time(create_time);
Query OK, 0  rows  affected (17.49 sec)
Records: 0  Duplicates: 0  Warnings: 0

再次查询: 

1
2
3
4
5
6
7
mysql>  select  max (create_time)  from  coupon_use_test;
+ ---------------------+
max (create_time)    |
+ ---------------------+
| 2016-06-25 16:44:25 |
+ ---------------------+
1 row  in  set  (0.00 sec)

查看执行计划: 

1
2
3
4
5
6
7
mysql> explain  select  max (create_time)  from  coupon_use_test;
+ ----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
| id | select_type |  table  | partitions | type | possible_keys |  key   | key_len | ref  |  rows  | filtered | Extra                        |
+ ----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
|  1 | SIMPLE      |  NULL   NULL        NULL  NULL           NULL  NULL     NULL  NULL  |      NULL  Select  tables optimized away |
+ ----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------------------+
1 row  in  set , 1 warning (0.00 sec)

索引是有序的,create_time字段加完索引之后取max(create_time)速度变快。


看到其他优化方法,通过转变SQL查询方式实现

1
2
3
4
5
6
7
mysql>  select  create_time  from  coupon_use_test  order  by  create_time  desc  limit 1;
+ ---------------------+
| create_time         |
+ ---------------------+
| 2016-06-25 16:44:25 |
+ ---------------------+
1 row  in  set  (0.00 sec)

查看执行计划: 

郑州同济医院:http://jbk.39.net/yiyuanzaixian/zztjyy/

1
2
3
4
5
6
7
mysql> explain  select  create_time  from  coupon_use_test  order  by  create_time  desc  limit 1;
+ ----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+------+----------+-------------+
| id | select_type |  table            | partitions | type  | possible_keys |  key              | key_len | ref  |  rows  | filtered | Extra       |
+ ----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | coupon_use_test |  NULL        index  NULL           | idx_create_time | 4       |  NULL  |    1 |   100.00 | Using  index  |
+ ----+-------------+-----------------+------------+-------+---------------+-----------------+---------+------+------+----------+-------------+
1 row  in  set , 1 warning (0.01 sec)



猜你喜欢

转载自blog.51cto.com/14510269/2431750