MySQL中bin()列如何索引?bin(16) UUID主键B树存储顺序咨询
MySQL中BIN(16)类型的B树排序规则
MySQL对BIN类型的排序及B树插入逻辑是按字节从左到右(最高有效位到最低有效位)进行比较的,B树的遍历顺序也遵循这一规则——字节序列靠前的部分权重更高,直接决定值的大小排序。
这一点对你们优化基于时间的UUID插入至关重要:原生UUIDv1的结构是时间低位在前、时间高位在后,直接转成BIN(16)存储时,时间的高权重部分位于字节序列后半段,插入时仍会导致B树频繁分裂,无法实现仅追加的高效插入。
解决办法是调整UUID的字节顺序,将时间高位部分移到字节序列前半段,这样新生成的时间UUID转成BIN(16)后,数值会随时间递增,插入时会直接追加到B树末尾,完美实现仅追加模式。
可以通过简单SQL验证这个排序逻辑:
-- 比较两个BIN值,前者前8字节为全1,后者后8字节为全1 SELECT UNHEX('FFFFFFFF00000000') > UNHEX('00000000FFFFFFFF');执行结果会返回
1,说明前半段字节(最高有效位部分)权重更高,决定了BIN值的大小排序。
内容的提问来源于stack exchange,提问作者Crater
相关产品推荐
相关产品推荐

