今天晚上突然想到乙個問題:對於單個欄位的索引,用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索引的大小應該是差不多的。沒有很大的差別(前提是插入的資料長度是相同的)
nvarchar與varchar的區別
varchar n 長度為 n 個位元組的可變長度且非 unicode 的字元資料。n 必須是乙個介於 1 和 8,000 之間的數值。儲存大小為輸入資料的位元組的實際長度,而不是 n 個位元組。所輸入的資料字元長度可以為零。varchar 在 sql 92 中的同義詞為 char varying ...
nvarchar與varchar的區別
一直以來對varchar和nvarchar不怎麼了解,也聽經理說過,他讓我盡量用varchar,我說為什麼啊,他說了一下,我不是太明白,哈哈!還是自己來找找吧!重網上找了別人的解釋,感覺有點頓悟!1.varchar n 長度為 n 個位元組的可變長度且非 unicode 的字元資料。n 必須是乙個介...
nvarchar與varchar的區別
varchar n 長度為 n 個位元組的可變長度且非 unicode 的字元資料。n 必須是乙個介於 1 和 8,000 之間的數值。儲存大小為輸入資料的位元組的實際長度,而不是 n 個位元組。所輸入的資料字元長度可以為零。varchar 在 sql 92 中的同義詞為 char varying ...