mysql 索引值生成规则
MySQL索引值是如何生成的取决于具体的数据类型和列的具体定义。对于大多数数据类型,MySQL会为索引键值使用原始的数据。对于字符串类型(如VARCHAR, CHAR, TEXT),索引键值可能是字符串的前缀,这是因为索引的目的是减少必须存储和检索的数据量。
以下是一些常见的数据类型和索引生成规则的例子:
对于整数类型(TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT),索引键值就是整数的原始值。
对于浮点数类型(FLOAT, DOUBLE),索引键值是浮点数的二进制表示。
对于日期和时间类型(DATE, DATETIME, TIMESTAMP, TIME),索引键值是日期或时间的原始值,也可能是转换成整数的表示(例如,日期可以转换成从一个固定点(如2000-01-01)开始的天数)。
对于字符串类型,索引键值可能是字符串的前缀,长度由列定义中的长度属性或者索引定义中的前缀长度指定。
对于BLOB和长文本类型(BLOB, TEXT),可以为其部分内容创建索引,通常是前512字节或者更少。
MySQL varchar 索引值是如何生成
MySQL中的VARCHAR类型用于存储可变长度的字符串。当一个VARCHAR列被索引时,索引的大小通常是不固定的,因为它依赖于列中存储的数据。为VARCHAR列创建索引时,MySQL会为索引值动态生成其大小。
当创建索引时,MySQL会为每个索引列分配一定的前缀长度(通常是前100个字符)以构建索引。这样的索引被称为“动态长度”或“变长”索引。这样做的目的是为了减少索引的大小,并允许索引覆盖更多的查询模式。
以下是创建带有VARCHAR列和索引的表的示例:
CREATE TABLE example (
id INT PRIMARY KEY,
text VARCHAR(255),
INDEX (text)
);
在这个例子中,text列是VARCHAR类型,并且有一个索引。当数据被插入到这个表中,并且text列的值被索引时,MySQL会为每个值动态生成索引大小。
例如,如果text列的值是"Hello, World!“,索引将仅包含足够的前缀来区分这个值与其他值(假设前100个字符足够区分)。如果另一行的text列值是"Hello, MySQL!”,索引也只会包含前100个字符来区分这个值。这样可以减少索引的大小,并允许更快的查询处理