索引列上的SELECT很慢

时间:2018-04-30 21:24:56

标签: mysql sql

在MySQL数据库中,我有一个只有2列的表,用于所有意图和目的:密钥哈希值和值。两者都是INTEGER类型。哈希列将有大量的重复(最坏的情况是每个哈希需要大约80k重复,由于小的哈希原像不可能使其唯一),并且该表包含大约1000亿行。

现在我将哈希列编入索引(CREATE INDEX idx_hash ON table(hash));但查找速度很慢。像SELECT value FROM table WHERE hash=123 LIMIT 50这样的东西,如果不是几小时,则需要几分钟,而主键列上类似大小的表上的类似选择将在同一台机器上快速完成。

所以我的问题是在这种情况下如何优化查找?索引列上是否可以使用子线性时间SELECT?这个表大部分是只读的,重建它是可能的,但需要很长时间,所以我想收集一些信息并正确地完成。

EXPLAIN说:

+----+-------------+----------------+------------+------+---------------+------+---------+------+-----------+----------+-------------+
| id | select_type | table          | partitions | type | possible_keys | key  | key_len | ref  | rows      | filtered | Extra       |
+----+-------------+----------------+------------+------+---------------+------+---------+------+-----------+----------+-------------+
|  1 | SIMPLE      | partial_lookup | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 100401571 |    10.00 | Using where |
+----+-------------+----------------+------------+------+---------------+------+---------+------+-----------+----------+-------------+

ANALYZE

+--------------------+---------+----------+----------+
| Table              | Op      | Msg_type | Msg_text |
+--------------------+---------+----------+----------+
| partial_lookup     | analyze | status   | OK       |
+--------------------+---------+----------+----------+
1 row in set (1.47 sec)

0 个答案:

没有答案