索引如何在mysql内部工作?

时间:2011-03-19 04:25:26

标签: mysql indexing

我在我的桌子上使用索引,但老实说我不知道​​它们是如何在内部工作的。

假设我有下表

id age
1  20
2  35
3  19 
4  18

如果我创建'age'索引,mysql如何组织行?它的组织取决于字段类型吗?要么...? mysql如何为unicode制作索引?

5 个答案:

答案 0 :(得分:3)

MySQL索引通常是按字节顺序排列的。索引的第一部分是索引的数据(通常是完整字段,尽管它可以是前几个字符的部分索引),第二部分是关联的主键。

对于处理unicode,如果MySQL知道,它就像其他语言的比较器类一样运行。支持Unicode的MySQL版本有一段代码可以识别unicode的正确排序,可以比较两个unicode字符,告诉哪一个大于另一个。

InnoDB的结果索引(假设您的PK是id)将是:

18->4
19->3
20->1
35->2

对于MyISAM,将使用对实际行位置的偏移引用。

另外,一篇可能会提供一些见解的好文章:http://www.xaprb.com/blog/2006/07/04/how-to-exploit-mysql-index-optimizations/

答案 1 :(得分:3)

MyISAM按行顺序保留行,而不是按键集群。索引是分层的,叶子指向实际的行。这个article提供了很好的介绍。

答案 2 :(得分:1)

我不确定“内部”是什么意思,但这里有一个pretty comprehensive MySQL文档解释了MyISAM引擎中的索引。

当然MySQL是开源的,如果你想了解索引的工作方式,那么你可以查看代码。

答案 3 :(得分:1)

InnoDB和MyISAM都可以使用(并且这是数据库实现者非常喜欢的选择)B + Trees,这是一种在使用HD绑定数据库的索引(如大多数RDBMS)时最常用的数据结构。要了解有关B +树的更多信息,我强烈建议您阅读它们here

答案 4 :(得分:1)

您可以查看我的SQL Indexing Tutorial (covers MySQL)

我想第一章Anatomy of an Index: What is an SQL Index?已经回答了很多问题。