select
cast(`order_list`.`CreateDate` as date) AS `CreateDay`,
count(0) as OrderStat,
sum(`order_list`.`OrderStatus` = 2) as PaidStat,
sum(`order_list`.`SendMailStatus` = 0 and `order_list`.`OrderStatus` = 2) AS `PaidDirectly`,
sum(`order_list`.`SendMailStatus` = 1 and `order_list`.`OrderStatus` = 2) AS `PaidAfterRemind`,
sum(`order_list`.`SendMailStatus` = 3 and `order_list`.`OrderStatus` = 2) AS `PaidAfterInquiry`
from
`order_list`
where
CreateDate >= '2010-11-26' and CreateDate <= '2010-12-30'
group by
date(`order_list`.`CreateDate`);
mysql> SHOW INDEX FROM ORDER_LIST;
+------------+------------+------------+--------------+-------------------+-----------+-------------+----------+--------+------+------------+--
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+------------+------------+------------+--------------+-------------------+-----------+-------------+----------+--------+------+------------+--
| ORDER_LIST | 0 | PRIMARY | 1 | ID | A | 280590 | NULL | NULL | | BTREE | |
| ORDER_LIST | 1 | CreateDate | 1 | CreateDate | A | 18 | NULL | NULL | | BTREE | |
| ORDER_LIST | 1 | CreateDate | 2 | OrderID | A | 280590 | NULL | NULL | | BTREE | |
| ORDER_LIST | 1 | CreateDate | 3 | ContactEmail | A | 280590 | NULL | NULL | | BTREE | |
| ORDER_LIST | 1 | CreateDate | 4 | UserID | A | 280590 | NULL | NULL | | BTREE | |
| ORDER_LIST | 1 | CreateDate | 5 | PaymentCurrencyID | A | 280590 | NULL | NULL | | BTREE | |
| ORDER_LIST | 1 | CreateDate | 6 | SendMailStatus | A | 280590 | NULL | NULL | YES | BTREE | |
+------------+------------+------------+--------------+-------------------+-----------+-------------+----------+--------+------+------------+--
7 rows in set (0.08 sec)
mysql> explain select
-> cast(`order_list`.`CreateDate` as date) AS `CreateDay`,
-> count(0) as OrderStat,
-> sum(`order_list`.`OrderStatus` = 2) as PaidStat,
-> sum(`order_list`.`SendMailStatus` = 0 and `order_list`.`OrderStatus`= 2) AS `PaidDirectly`,
-> sum(`order_list`.`SendMailStatus` = 1 and `order_list`.`OrderStatus`= 2) AS `PaidAfterRemind`,
-> sum(`order_list`.`SendMailStatus` = 3 and `order_list`.`OrderStatus`= 2) AS `PaidAfterInquiry`
-> from
-> `order_list`
-> where
-> CreateDate >= '2010-11-26' and CreateDate <= '2010-12-30'
-> group by
-> date(`order_list`.`CreateDate`);
+----+-------------+------------+------+---------------+------+---------+------+--------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+------+---------------+------+---------+------+--------+----------------------------------------------+
| 1 | SIMPLE | order_list | ALL | CreateDate | NULL | NULL | NULL | 280590 | Using where; Using temporary; Using filesort |
+----+-------------+------------+------+---------------+------+---------+------+--------+----------------------------------------------+请教各位大虾这怎么优化哈.! 急.在线等.!
mysql> show index from order_list;
+------------+------------+------------+--------------+-------------------+-----
------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+------------+------------+------------+--------------+-------------------+-----------+-------------+----------+--------+------+------------+---------+
| order_list | 0 | PRIMARY | 1 | ID | A | 280590 | NULL | NULL | | BTREE | |
| order_list | 1 | CreateDate | 1 | CreateDate | A | 18 | NULL | NULL | | BTREE | |
| order_list | 1 | CreateDate | 2 | OrderID | A | 280590 | NULL | NULL | | BTREE | |
| order_list | 1 | CreateDate | 3 | ContactEmail | A | 280590 | NULL | NULL | | BTREE | |
| order_list | 1 | CreateDate | 4 | UserID | A | 280590 | NULL | NULL | | BTREE | |
| order_list | 1 | CreateDate | 5 | PaymentCurrencyID | A | 280590 | NULL | NULL | | BTREE | |
| order_list | 1 | CreateDate | 6 | SendMailStatus | A | 280590 | NULL | NULL | YES | BTREE | |
| order_list | 1 | OrderStat | 1 | CreateDate | A | 12 | NULL | NULL | | BTREE | |
| order_list | 1 | OrderStat | 2 | SendMailStatus | A | 12 | NULL | NULL | YES | BTREE | |
| order_list | 1 | OrderStat | 3 | OrderStatus | A | 12 | NULL | NULL | | BTREE | |
+------------+------------+------------+--------------+-------------------+-----------+-------------+----------+--------+------+------------+---------+
10 rows in set (0.17 sec)
cast(`order_list`.`CreateDate` as date) AS `CreateDay`,
count(0) as OrderStat,
sum(`order_list`.`OrderStatus` = 2) as PaidStat,
sum(`order_list`.`SendMailStatus` = 0 and `order_list`.`OrderStatus` = 2) AS `PaidDirectly`,
sum(`order_list`.`SendMailStatus` = 1 and `order_list`.`OrderStatus` = 2) AS `PaidAfterRemind`,
sum(`order_list`.`SendMailStatus` = 3 and `order_list`.`OrderStatus` = 2) AS `PaidAfterInquiry`
from
`order_list`
where
CreateDate >= '2010-11-26' and CreateDate <= '2010-12-30'
group by
date(`order_list`.`CreateDate`) order by null;,索引都有了.差不多就这样了..