如果sql server列是字符串而不是guid,那么联接将如何受到影响(假设没有索引)。这有关系吗?
此外,当您在字符串列上放置索引时,它是否与具有索引的整数列一样高效?
即。当您在字符串或整数列上放置索引时,结果索引是否以相同的方式构建,因此执行相同的操作?
答案 0 :(得分:4)
所有其他条件相同,数据越少越好。 data
我的意思是字节。
对于几乎所有SQL Server应用程序而言,最严重的瓶颈是磁盘I / O,从磁盘(或缓存)中提取更少的数据会使一切变得更快。
这取决于您声明的字符串长度。请记住GUID
是16个字节,varchar
是每个字符1个字节。 nvarchar
每个字符2个字节。 (n)varchar
每行还有一个 2字节开销来定义字符串长度。
空格/字节明智,String
大于GUID
大于int
。
您的字段定义越小/越紧,因此int
比guid
更快,string
比{{1}}更快。
答案 1 :(得分:1)
没有索引,列的大小确实没有太大的区别,因为SQL Server无论如何都必须基本上进行表扫描,以链接这两个值。无论是4字节的INT还是60字节的VARCHAR,都不会产生很大的不同 - 无论如何数据都在数据页中。
但是如果你开始使用索引,较小和固定长度数据(4字节固定长度INT
)明显优于较大的固定数据宽度结构(如16字节GUID / UNIQUEIDENTIFIER
),比VARCHAR
等可变宽度列好得多 - 但同样:只有索引......
答案 2 :(得分:0)
字符串列的开销总是比int列高。索引通常是某种散列,并且字符串(特别是长字符串)总是需要比简单的16/32/64位整数更长的哈希值。
扫描任一索引很可能需要相同的时间,但生成/维护索引的开销总是会使int列获胜。