日期:2014-05-16 浏览次数:20569 次
今天晚上突然想到一个问题:对于单个字段的索引,用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索引的大小应该是差不多的。没有很大的差别(前提是插入的数据长度是相同的)
?