所以当列上有索引,并且你做一个简单的SELECT * FROM表WHERE indexed_column = value时,那是一个O(1)搜索吗?索引的内容是整数还是字符串是否重要?
答案 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中指出的不同因素。