mysql的索引会进行排序,但是底层如何对数据的大小进行判断?

我们都知道, mysql 的索引会对数据进行排序然后再进行存放.
但是我一直以来都有一个问题, 这个排序的标准/依据是什么? 对于不同的字段值, mysql 如何判断他们谁大谁小,谁在前谁在后?
从人类的逻辑来说,如果索引字段值是整型或者浮点型,那排序的标准和方案很好理解,无非就是2>1, 1<2的问题,但是往往我们的索引都是字符串类型,甚至是汉字,二进制数据,mysql 是如何对这些数据进行排序,排序的依据是什么呢?
我的猜测是mysql 内部将所有的数据都转换为整数,然后进行统一的判断,如果真的是这样,这个转换成整数的逻辑又是啥?
请大家赐教~~

阅读 4.8k
3 个回答

MySQL的字符串类型(CHARVARCHARTEXT)有一个叫COLLATE(校对)的属性,专门用来比较和排序的。
这个属性非常有趣,用gbk_chinese_ci的话就是按照拼音排序,不过用utf8_general_ci的话就比较混乱了。这里不详细展开,可以搜一下MySQL相关文档。

数字和时间这些排序你应该没有问题。字符串的话应该是按照字符的ansii/unicode排序

底层物理存储都是二进制,1001010111000100010这种,不同的类型并没有什么不一样,比较大小从前到后比就行了啊

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题