BTREE的优势?

sha*_*nuo 21 mysql

我创建没有"USING BTREE"子句的索引.使用BTREE索引有什么好处吗?

CREATE INDEX `SomeName` USING BTREE ON `tbl_Name`(`column_name`);
Run Code Online (Sandbox Code Playgroud)

mjv*_*mjv 43

首先,根据所使用的存储引擎,您可能没有选择(例如InnoDB专门使用BTREE作为其索引).

此外,BTREE是大多数存储引擎的默认索引类型.

现在......有些情况下,使用替代索引类型可能会提高性能.当HASH索引可能有帮助时(相对罕见的情况).请注意,创建HASH索引时,还会生成BTREE索引.这部分是由于哈希索引只能解析等式谓词.(诸如WHERE价格> 12.0的条件不能由哈希索引处理).

简而言之:继续使用BTREE,无论是隐式的(如果BTREE是所用存储的默认值),还是显式的.了解其他类型的索引,以便在需要时了解它们.

编辑:(在搜索可能使用备用索引类型
的情况下)有效的情况是RTREE索引相当直接.这些只有MySQL支持在"SPATIAL"数据库的上下文中,即包含Geo位置上下文的数据库,如Point模型中的Point和其他对象.

HASH索引更通用(不限于特定的应用程序或数据类型),并且通常可以遵循一个人对哈希的直观理解,以获得关于何时这些索引可能胜过旧但忠实的BTREE的提示.如前所述,这意味着通常使用相同谓词搜索的列.我猜测相对较短的查找表等可能会受益,具体取决于MySQL中的有效实现.


yk4*_*ver 17

BTREE是默认的索引方法.你可以安全地省略它.

  • 这真的取决于存储引擎 (10认同)

RC.*_*RC. 7

这取决于您使用的存储引擎.对于大多数人来说,BTREE是默认值,因此指定它并不会真正改变任何东西.对于MEMORY/HEAP和NDB等存储引擎,默认情况下默认使用HASH索引.

更多信息可以在这里找到.

从性能角度来看,B树或HASH索引是否对您有利,取决于数据以及您如何访问它.如果您知道您的查询将准确定位一行或分散各行,则HASH索引可能很有用.除此之外的任何东西,我通常更喜欢BTREE索引,因为数据被排序,因此使范围查询和返回多行的那些更有效.