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

これが結果(INDEX NOT USED)で、応答が非常に遅くなりました

+----+-------------+-----------------+------+---------------+--------+---------+-------+--------+----------------------------------------------+
| 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

x1x3が完全に一致し、通常は不等式である場合date1、インデックスは または のいずれかにある必要があり(x1, x3, date1)ます(x3, x1, date1)。一般的な考え方は、WHERE 句の不等式ではインデックスの最後の列を使用する必要があるというものです。

于 2013-04-03T04:06:57.863 に答える