某个网站做拍卖预展的好处,公司查询企业查询 天眼查,河南工程建设协会网站,wordpress 静态规则2019独角兽企业重金招聘Python工程师标准 在MySQL中#xff0c;大多数索引#xff08;如 PRIMARY KEY,UNIQUE,INDEX和FULLTEXT#xff09;都是在BTREE中存储#xff0c;但使用memory引擎可以选择BTREE索引或者HASH索引#xff0c;两种不同类型的索引各自有其… 2019独角兽企业重金招聘Python工程师标准 在MySQL中大多数索引如 PRIMARY KEY,UNIQUE,INDEX和FULLTEXT都是在BTREE中存储但使用memory引擎可以选择BTREE索引或者HASH索引两种不同类型的索引各自有其不同的使用范围。 Hash 索引结构的特殊性其检索效率非常高索引的检索可以一次定位不像B-Tree 索引需要从根节点到枝节点最后才能访问到页节点这样多次的IO访问所以 Hash 索引的查询效率要远高于 B-Tree 索引。 可能很多人又有疑问了既然 Hash 索引的效率要比 B-Tree 高很多为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢任何事物都是有两面性的Hash 索引也一样虽然 Hash 索引效率高但是 Hash 索引本身由于其特殊性也带来了很多限制和弊端主要有以下这些。 1Hash 索引仅仅能满足””,”IN”和””查询不能使用范围查询。 由于 Hash 索引比较的是进行 Hash 运算之后的 Hash 值所以它只能用于等值的过滤不能用于基于范围的过滤因为经过相应的 Hash 算法处理之后的 Hash 值的大小关系并不能保证和Hash运算前完全一样。 2Hash 索引无法被用来避免数据的排序操作。 由于 Hash 索引中存放的是经过 Hash 计算之后的 Hash 值而且Hash值的大小关系并不一定和 Hash 运算前的键值完全一样所以数据库无法利用索引的数据来避免任何排序运算 3Hash 索引不能利用部分索引键查询。 对于组合索引Hash 索引在计算 Hash 值的时候是组合索引键合并后再一起计算 Hash 值而不是单独计算 Hash 值所以通过组合索引的前面一个或几个索引键进行查询的时候Hash 索引也无法被利用。 4Hash 索引在任何时候都不能避免表扫描。 前面已经知道Hash 索引是将索引键通过 Hash 运算之后将 Hash运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表中由于不同索引键存在相同 Hash 值所以即使取满足某个 Hash 键值的数据的记录条数也无法从 Hash 索引中直接完成查询还是要通过访问表中的实际数据进行相应的比较并得到相应的结果。 5Hash 索引遇到大量Hash值相等的情况后性能并不一定就会比B-Tree索引高。 对于选择性比较低的索引键如果创建 Hash 索引那么将会存在大量记录指针信息存于同一个 Hash 值相关联。这样要定位某一条记录时就会非常麻烦会浪费多次表数据的访问而造成整体性能低下。 转载于:https://my.oschina.net/henrydong/blog/161861