所以这里是一个非常简单的表格 'TBL':为什么这个简单的MySQL查询非常慢?
+---------+---------------------+------+-----+---------+----------------+
| 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秒)
我对coumn索引正确的,其中点,所有我修改是结果行表示。 为什么会有这么可怕的延迟? (我必须说,我无法每次都想重现这种延迟:即使在'重置查询缓存'或设置'query_cache_type = off'命令之后,它也可以快速完成。
您可以尝试运行'EXPLAIN',但怀疑这是更多与服务器相关的问题。 –
为什么要选择86个字段并且做两列?我认为这里的问题是查询的逻辑:/也许你应该分享你要实现的目标? –
引擎?,请尝试全文索引 – jcho360