哈希索引基于哈希表实现,只有精确匹配索引所有列的查询才有效。对每行数据,存储引擎都会对所有的索引列计算一个哈希码,哈希码是一个较小的值,且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。
Memory引擎是支持非唯一哈希索引的,如果多个列的哈希值相同,索引会以链表的方式存放多个记录指针到同一个哈希条目中。下面看一个例子,假设有如下表:
CREATE TABLE testhash (
fname VARCHAR(50) NOT NULL,
lname VARCHAR(50) NOT NULL,
KEY USING HASH(fname)
) ENGINE=MEMORY; //指定存储引擎
表中有以下数据:
+-------+-----------+
| fname | lname |
+-------+-----------+
| Arjen | Lentz |
|</