我正在对我的表使用索引,但老实说,我不知道它们在内部是如何工作的。
假设我有下面的表
id age
1 20
2 35
3 19
4 18如果我建立一个'age‘索引,mysql是如何组织行的?它的组织依赖于字段类型吗?或者...?mysql如何为unicode创建索引??
发布于 2011-03-19 12:34:45
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/
发布于 2011-03-19 12:37:57
MyISAM保持行的插入顺序,而不是按键聚集。索引是分层的,叶子指向实际的行。这个article提供了一个很好的介绍。
发布于 2011-03-19 12:36:29
我不确定您所说的“内部”是什么意思,但这里有一段MySQL文档的pretty comprehensive片段,它解释了MyISAM引擎中的索引。
当然,MySQL是开源的,如果你的意思是想了解索引是如何工作的,那么你可以看看代码。
https://stackoverflow.com/questions/5360063
复制相似问题