【发布时间】:2019-06-04 08:52:45
【问题描述】:
我有一个表 cashflow 和 4 个索引 [is_dp]、[is_wd]、[is_dis]、[time]。
`is_dp` tinyint(1) => (0,1)
`is_wd` tinyint(1) => (0,1)
`is_dis` tinyint(1) => (0,1)
`time` datetime
这个表有 300 万行。
我的查询是:
1. SELECT * FROM `cashflow` WHERE is_dp = 1 AND time >= '2019-05-01 00:00:00' AND time <= '2019-05-31 23:59:59';
2. SELECT * FROM `cashflow` WHERE is_wd = 1 AND time >= '2019-05-01 00:00:00' AND time <= '2019-05-31 23:59:59';
3. SELECT * FROM `cashflow` WHERE is_dis = 1 AND time >= '2019-05-01 00:00:00' AND time <= '2019-05-31 23:59:59';
索引time 不适用于每个键 [is_dp]、[is_wd]、[is_dis]。
解释:
| query | possible_keys | key | key_len | ref | rows | Extra |
| 1. | is_dp,time | time | 8 | NULL | 242616 | Using index condition; Using where; |
| 2. | is_wd,time | is_wd | 1 | const | 494546 | Using where; |
| 3. | is_dis,time | is_dis | 1 | const | 1089870 | Using where; |
如何优化?
还是复合键是个好办法?
ADD KEY `dp_time` (`is_dp`,`time`);
ADD KEY `wd_time` (`is_wd`,`time`);
ADD KEY `dis_time` (`is_dis`,`time`);
非常感谢!
【问题讨论】:
-
是的,复合索引可能会有所帮助。
-
@Barmar 知道了。谢谢。
标签: mysql optimization indexing