科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Schema的优化和索引 - 索引的基础 - 索引的类型 - Hash索引1

Schema的优化和索引 - 索引的基础 - 索引的类型 - Hash索引1

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Schema的优化和索引 - 索引的基础 - 索引的类型 - Hash索引

作者:ddvip 来源:ddvip 2009年12月23日

关键字: Schema PHP MySQL

  • 评论
  • 分享微博
  • 分享邮件

Schema的优化和索引 - 索引的基础 - 索引的类型 - Hash索引1

 

Hash索引

  Hash索引是建立在Hash table至上的,并且它只对准确查找有效,也就是说,必须查找索引上的每一个列。对于每个行,存储引擎计算了索引列的Hash code。这个hash code是非常小,并且对于其他行不同的数值,这些Hash code也是不相同的。在索引中存储了hash code并且在hash table中存储了一个指针指向每一行。

  在MySQL中,只有Memory存储引擎支持显式的Hash索引。虽然Memory表也可以使用B-Tree索引,但是它们是默认的索引类型是Hash索引。Memory引擎支持非唯一的Hash索引,这在数据库领域中是不寻常的。如果多个值有相同的Hash code,那么索引就会在在相同的hash table的实体中,使用一个linked list保存这些值所属行的指针。

  说一个例子吧,假设表结构如下

CREATE TABLE testhash (
fname VARCHAR(50) NOT NULL,
lname VARCHAR(50) NOT NULL,
KEY USING HASH(fname)
) ENGINE=MEMORY;

  包含的数据如下:

mysql> SELECT * FROM testhash;
+--------+-----------+
| fname | lname |
+--------+-----------+
| Arjen | Lentz |
| Baron | Schwartz |
| Peter | Zaitsev |
| Vadim | Tkachenko |
+--------+-----------+

  假设我们有一个hash的函数叫f(),它会返回如下值(这些都是例子,并不是真实的值):

f('Arjen') = 2323
f('Baron') = 7437
f('Peter') = 8784
f('Vadim') = 2458

  索引的数据结构为

Slot Value
2323 Pointer to row 1
2458 Pointer to row 4
7437 Pointer to row 2
8784 Pointer to row 3

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章