【发布时间】:2011-05-10 21:41:06
【问题描述】:
试过谷歌搜索但是:
问题: 为 MySQL 字段外部生成 Sequential UID 值的最佳方法,该字段必须可以表示为字符串。
原因:
从 char[0] 向前搜索字段索引时,磁盘顺序/页面附加插入的通用顺序 UUID 值用于写入性能和读取速度的日期前缀。该列将被索引,但会寻找最佳数据以提高索引读取和表写入性能,而不是普通的旧 UUID。
我最初的想法是在固定宽度的字符字段中附加或替换 UUIDv4 生成的字符串的某些部分(即[Unix epoch][remaining UUID4])以某种粒度(可能是填充的纪元)的日期,但我不确定这是否会满足所需-page/disk 排序结果和索引搜索结果。一个例子是:
12904645950049bceba1cc24e80806dd
这些值必须独立于 MySQL 本身,因此使用 UUID 和时间戳,而不是自动递增的某些变体。
任何了解 MySQL 索引内部的人有什么建议(对于 InnoDB 表)?
艾登
【问题讨论】:
-
调整数据结构以提高性能通常会敲响我的警钟。你确定你问的是正确的问题吗?内部结构(例如预读策略)往往会随着版本的变化而变化,并使您的优化变得无用。如果您的更新是突发的,那么当您最需要它时,时代可能会回来困扰您。我会专注于使用 innodb 诊断工具来了解真正的瓶颈在哪里,并通过数据库参数化而不是更改数据模型来解决它们。
-
更多的是已知的普通 UUID 会对索引等造成过度压力......所以寻找轻微的 UUID 修改。如果我能杀死两只鸟,能够对 UUID 进行日期排序也是一个好处......