btree和rtree索引有什么区别?


36

我在MySQLWorkbench上注意到,您可以在进行工程前设计之前选择如何存储索引。存储类型为:

  1. BTREE
  2. 实时树
  3. 杂凑

经过研究,我发现了一些非常重要的信息,因此我正在寻找有关这些信息之间的区别和/或为什么应该选择一个而不是另一个的实用信息。

另外,我以前从未选择过存储类型,因此我假设MySQL正在选择默认存储类型(BTREE?)

Answers:


51

BTree(实际上是B * Tree)是有效的有序键值映射。含义:

  • 有了键,BTree索引可以快速找到记录,
  • 可以按顺序扫描BTree。
  • 获取范围内的所有键(和记录)也很容易。

例如 “上午9点至下午5点之间的所有事件”,“以'R'开头的姓氏”

RTree是a spatial index,表示它可以快速识别close2个或多个维度中的值。在地理数据库中用于查询,例如:

从(x,y)到X米以内的所有点

杂凑

哈希是无序的键值映射。它甚至比BTree更有效:O(1)代替O(log n)

但是它没有顺序的概念,因此不能用于排序操作或获取范围。

附带说明一下,最初,MySQL只允许在MEMORY表上使用哈希索引。但我不确定这些年来是否已更改。


MySQL是否支持Rtrees?
Pacerier,2012年

2
是的,它们被称为SPATIAL INDEX(dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html
哈维尔

太好了,谢谢=)除了这3种结构,还是在不久的将来还有其他结构吗?
Pacerier

内存表也支持btree索引
Amareswar 2012年

@Amareswar,对。也许我的回答可以双向读取,但我的意思是,仅在MEMORY表上允许使用HASH索引,而在“ normal”表上不允许使用。
哈维尔2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.