【发布时间】:2015-03-12 15:32:30
【问题描述】:
我刚刚发现 MEMORY 表中 HASH 索引列上的 PRIMARY KEY 本身就是 HASH 索引,如下所示:
mysql> CREATE TABLE `test_memory` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> PRIMARY KEY (`id`),
-> KEY `id` (`id`) USING HASH
-> ) ENGINE=MEMORY DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.10 sec)
mysql> SHOW INDEXES FROM test_memory;
+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| test_memory | 0 | PRIMARY | 1 | id | NULL | 0 | NULL | NULL | | HASH | | |
| test_memory | 1 | id | 1 | id | NULL | 0 | NULL | NULL | | HASH | | |
+-------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
2 rows in set (0.00 sec)
然后我想知道:由于 PRIMARY KEYs 必须检查其列中新条目的唯一性,这是否意味着插入 test_memory 是在 O(n) 时间,而不是 O(log n) 时间带有 BTREE PRIMARY KEY 的表?
【问题讨论】:
标签: mysql hash time-complexity unique-index