索引字段和硬盘/ RAM上的空间标记最适合什么? Biginteger或Varchar(15)? 我能有这样的例子索引号:Mysql Bigint VS Varchar
from 10000001 to 45281229703 and higher...
但是,什么是更好的选择呢? 也在非索引字段上,哪种字段类型更好?
索引字段和硬盘/ RAM上的空间标记最适合什么? Biginteger或Varchar(15)? 我能有这样的例子索引号:Mysql Bigint VS Varchar
from 10000001 to 45281229703 and higher...
但是,什么是更好的选择呢? 也在非索引字段上,哪种字段类型更好?
BIGINT
始终是8个字节,VARCHAR(15)
是依赖于值长度1..16字节,所以需要BIGINT
上少量(少于7个位数)上大numnbers更少的存储器,但更多的内存。另外,BIGINT速度更快。
但作为外键在其他表?例如:id文本for_id,对于id我必须做bigint,对吧?那么选择什么? )如果我有从1到45281229703和更高的行的 – brabertaser19 2013-03-06 07:51:27
这里也签名/签名有很大的区别? – brabertaser19 2013-03-06 07:52:10
另外请记住,Varchar需要编码转换,因此不明确,原始数字不存在此问题。 – 0xCAFEBABE 2013-03-06 07:54:54
VARCHAR增加了开销:
的每场,并在索引 存储(在MySQL额外2个字节IIRC)将字符串需要长度需要在比较
但作为其他表中的外键?例如:id文本for_id,对于id我必须做bigint,对吧? – brabertaser19 2013-03-06 07:50:22
是的,也bigint – PSR 2013-03-06 07:50:54
这里也签名/签名是很大的区别? – brabertaser19 2013-03-06 07:53:04
我们已经在模拟运行试验核对多个处理环境。
这里是脚本来执行上述步骤:
Create table r5(mob bigint,m_mob varchar(30));
Create index i_d on r5(mob,m_mob);
do $$
begin
for i in 1..3000000 loop
insert into r5(mob,m_mob) values(i,i||’abc’);
end loop;
end; $$
select * from r5
where mob=2900000;
select * from r5
where m_mob=’2900000abc’;
一个更好的问题是哪些类型*正确*代表现场..一旦接通后,使用它。如果没有*测量*性能问题(使用可以测量替代品性能的设置),则不存在性能问题 - 不要像这样“优化”。 – 2013-03-06 07:58:01
@pst麻烦的是,bigint和varchar - 都代表的领域正常,所以,我如何需要 – brabertaser19 2013-03-06 08:04:14
第一代表一个数字。另一个代表文本(可能是数字的文本表示)。哪个是对的? – 2013-03-06 08:07:19