0

我有这样的桌子

tbl_reg_process
- id, bigint(20)
- x1, varchar(255) nullable
- x2, varchar(255) nullable
- x3, varchar(255) nullable
- date1, datetime, nullable

这是解释查询:

EXPLAIN SELECT x1,COUNT(x1) FROM tbl_reg_process WHERE date1 >= '2013-04-01 00:00:00' AND x3='U' GROUP BY x1

这是结果(未使用索引),我得到了超慢的响应

+----+-------------+-----------------+------+---------------+--------+---------+-------+--------+----------------------------------------------+
| id | select_type | table           | type | possible_keys | key    | key_len | ref   | rows   | Extra                                        |
+----+-------------+-----------------+------+---------------+--------+---------+-------+--------+----------------------------------------------+
|  1 | SIMPLE      | tbl_reg_process | ref  | x3,date1      | status | 768     | const | 585521 | Using where; Using temporary; Using filesort |
+----+-------------+-----------------+------+---------------+--------+---------+-------+--------+----------------------------------------------+

问题是,我应该创建什么索引,以便可以使用包括 date1、x3 和 x1 在内的 where 条件?

4

1 回答 1

1

如果x1and x3will 完全匹配,并且date1通常是不等式,则索引应该在(x1, x3, date1)或上(x3, x1, date1)。一般的想法是,WHERE 子句中的不等式应该使用索引中的最后一列。

于 2013-04-03T04:06:57.863 回答