设置列在mysql表中索引确保O(1)查找?

时间:2011-10-06 22:35:18

标签: mysql time-complexity

所以当列上有索引,并且你做一个简单的SELECT * FROM表WHERE indexed_column = value时,那是一个O(1)搜索吗?索引的内容是整数还是字符串是否重要?

2 个答案:

答案 0 :(得分:5)

MySQL的MyISAM或InnoDB存储引擎中的任何查找都不是O(1)搜索。那些存储引擎使用B + Trees来实现索引。他们能做的最好的是O(log 2 n)搜索。

MEMORY存储引擎默认使用HASH索引类型,以及B + Tree索引类型。只有HASH索引才能实现O(1)查找。

在任何一种情况下,索引列的数据类型都不会改变它。

有关MySQL索引的更多信息,请阅读http://dev.mysql.com/doc/refman/5.1/en/mysql-indexes.html

答案 1 :(得分:1)

没有。

MySQL使用B-Trees,如online book中所述。它们的复杂性取决于每个节点的密钥数量,因此可以比O(log2n)做得更好。

MySQL使用的每个节点的密钥数取决于question中指出的不同因素。