我有两张桌子:
表A,列INT t_a, INT t_b, INT t_c, INT t_d, VARCHAR t_var
表B包含列INT t_a, INT t_b, INT t_c, INT t_d, CHAR t_cha
如果我选择列t_a,表A和表B之间会有任何性能差异吗?
答案 0 :(得分:2)
答案 1 :(得分:2)
是的,但它非常微妙。我认为字符字段实际上有与它们相关的长度。
数据的存储方式有所不同。 char
字段将存储数据库中的所有字符,即使它们最后是空格。 varchar()
字段仅存储字段所需的长度。
所以,如果你有一个包含美国州名的表,那么:
create table states (
stateid int,
statename char(100)
);
在数据库中会占用100 * 50 + 100 * 4 = 5,400字节。使用varchar()
时,空间使用量将会少得多。
在较大的表中,这可能会增加存储数据所需的页数。此额外存储可能会使查询速度减慢一些。 (在具有大量记录和大量浪费空间的桌子上可能会引人注意)。
答案 2 :(得分:2)
理论上,在处理VARCHAR时应该存在性能损失,因为您无法使用固定地址计算。
但在实践中,现在这是不可见的。