我在我的桌子上使用索引,但老实说我不知道它们是如何在内部工作的。
假设我有下表
id age
1 20
2 35
3 19
4 18
如果我创建'age'索引,mysql如何组织行?它的组织取决于字段类型吗?要么...? mysql如何为unicode制作索引?
答案 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?已经回答了很多问题。