日期:2014-05-16  浏览次数:20431 次

bigInt与varchar索引的大小

今天晚上突然想到一个问题:对于单个字段的索引,用bigint和varchar做索引,bigint索引到底能减少多大?
于是我建了两张表:
? CREATE TABLE `test_long` (????? `id` bigint(20) NOT NULL,????? KEY `in` (`id`)?? ) ENGINE=InnoDB DEFAULT CHARSET=gbk;
? CREATE TABLE `test_str` (????? `id` varchar(20) CHARACTER? NOT NULL,????? KEY `in` (`id`)?? ) ENGINE=InnoDB DEFAULT CHARSET=gbk;

两张表都只有一个字段,一个是bigint型,一个是varchar类型。然后对这两个字段做BTree索引。并向表中分别插入2w条数据。
结果如下:

?

test_long Index Length: 416.00 KB (425,984);
Data Length: 1.52 MB (1,589,248)
test_str Index Length: 448.00 KB (458,752)
Data Length: 1.52 MB (1,589,248)
??
从两万条数据来看,索引的大小基本没有什么差别,仅仅是差了一个数据块32K。
把数据量增加到8万条的时候,索引大家差别还是很小。

test_long Index Length: 2.52 MB (2,637,824);
Data Length: 3.52 MB (3,686,400)
test_str Index Length: 2.52 MB (2,637,824)
Data Length: 3.52 MB (3,686,400)
? 索引大小仍然没有明显的差别。
这个结果表明bigint和varchar索引的大小应该是差不多的。没有很大的差别(前提是插入的数据长度是相同的)

?