したがって、ここに非常に単純なテーブル 'tbl' があります。
+---------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+----------------+
| val | varchar(45) | YES | MUL | NULL | |
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
+---------+---------------------+------+-----+---------+----------------+
そしてそれのためのインデックス:
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| tbl | 0 | PRIMARY | 1 | id | A | 201826018 | NULL | NULL | | BTREE | |
| tbl | 1 | val | 1 | val | A | 881336 | NULL | NULL | YES | BTREE | |
+--------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
私はこの単純な選択を試みています:
select val from tbl where val = 'iii';
結果: セット内の 86208 行 (0.08 秒)
しかし、少し変更したい場合:
select id, val from tbl where val = 'iii';
結果は次のとおりです: セットで 86208 行 (47.30 秒)
私は、どこを指すかというカウントの権利を持っています。私が変更しているのは、結果の行の表現だけです。なぜこれほどまでに恐ろしい遅延が発生するのでしょうか。(この遅延を毎回再現することはできないと言わざるを得ません。「reset query cache」または「query_cache_type=off」コマンドを設定した後でも、すぐに実行できます)。