了解sql连接和数据类型的影响

时间:2011-08-10 20:14:20

标签: sql sql-server

如果sql server列是字符串而不是guid,那么联接将如何受到影响(假设没有索引)。这有关系吗?

此外,当您在字符串列上放置索引时,它是否与具有索引的整数列一样高效?

即。当您在字符串或整数列上放置索引时,结果索引是否以相同的方式构建,因此执行相同的操作?

3 个答案:

答案 0 :(得分:4)

所有其他条件相同,数据越少越好。 data我的意思是字节

对于几乎所有SQL Server应用程序而言,最严重的瓶颈是磁盘I / O,从磁盘(或缓存)中提取更少的数据会使一切变得更快。

这取决于您声明的字符串长度。请记住GUID是16个字节,varchar是每个字符1个字节。 nvarchar每个字符2个字节。 (n)varchar每行还有一个 2字节开销来定义字符串长度。

空格/字节明智,String大于GUID大于int

您的字段定义越小/越紧,因此intguid更快,string比{{1}}更快。

答案 1 :(得分:1)

没有索引,列的大小确实没有太大的区别,因为SQL Server无论如何都必须基本上进行表扫描,以链接这两个值。无论是4字节的INT还是60字节的VARCHAR,都不会产生很大的不同 - 无论如何数据都在数据页中。

但是如果你开始使用索引,较小固定长度数据(4字节固定长度INT)明显优于较大的固定数据宽度结构(如16字节GUID / UNIQUEIDENTIFIER),比VARCHAR等可变宽度列好得多 - 但同样:只有索引......

答案 2 :(得分:0)

字符串列的开销总是比int列高。索引通常是某种散列,并且字符串(特别是长字符串)总是需要比简单的16/32/64位整数更长的哈希值。

扫描任一索引很可能需要相同的时间,但生成/维护索引的开销总是会使int列获胜。