我创建没有USING BTREE子句的索引。使用BTREE索引有什么优势吗?
CREATE INDEX `SomeName` USING BTREE ON `tbl_Name`(`column_name`);发布于 2009-11-06 14:27:10
BTREE是默认的索引方法。你可以安全地省略它。
发布于 2009-11-06 14:30:12
首先,取决于所使用的存储引擎,您可能没有选择(例如,InnoDB只使用BTREE作为索引)。
此外,BTREE是大多数存储引擎的默认索引类型。
现在..。在某些情况下,使用替代索引类型可能会提高性能。有一些(相对罕见的情况)哈希索引可能会有所帮助。注意,当创建散列索引时,也会生成BTREE索引。部分原因是哈希索引只能解析相等谓词。(一个条件,如Price > 12.0不能由散列索引处理)。
简而言之:继续使用BTREE,不管是隐式的(如果BTREE是所使用的存储的默认值),还是显式的。了解其他类型的索引,这样您就可以了解它们了。
编辑:(在搜索可能使用替代索引类型的情况下)
实际上,对于RTREE索引来说,情况是相当直接的。只有在MySQL环境下才支持这些,即包含地理位置上下文的数据库,如“空间”数据库模型中的Point和其他对象)。
哈希索引更通用(不限于特定的应用程序或数据类型),人们通常可以根据自己对散列的直观理解来得到一个提示,即这些索引的性能何时可能优于传统但忠实的BTREE。如前所述,这将意味着通常使用相等谓词搜索列。我猜相对较短的查找表等可能会受益,这取决于MySQL中的有效实现。
发布于 2009-11-06 14:29:52
这取决于你使用的是哪个存储引擎。对于大多数人来说,BTREE是默认的,因此指定它不会真正改变任何事情。对于内存/堆和NDB等存储引擎,默认情况下默认使用哈希索引。
更多信息可以找到这里。。
从性能的角度来看,B树还是散列索引对您是否有利,取决于数据和访问它的方式。如果您知道您的查询将精确地针对一行或分散的单个行,那么哈希索引可能是有用的。除此之外,我通常更喜欢BTREE索引,因为数据是排序的,因此使范围查询和返回多行的查询更有效。
https://stackoverflow.com/questions/1687910
复制相似问题