使用 VS2005 (c#) 和 SQLServerCE 库我可以告诉你它确实会影响性能,但我不能真正回答为什么。 此外,实际上对性能产生负面影响的是该列中的数据长度,而不是该列本身。
在一个工作项目上做我自己的一些性能测试,我遇到了一个类似的场景,只是一个额外的专栏。
table1
c1 NVARCHAR (20)
c2 NVARCHAR (20)
c3 NVARCHAR (20)
c4 NVARCHAR (20)
c5 NVARCHAR (4000) //maximum allowed and fully populated for testing purposes
如果你跑...
select c1, c2, c3, c4 From table1
...大约需要 1560 毫秒。
如果您创建两个表,拉出大列(并自然地提供一个外键来关联这两个表)并在第一个表上运行相同的查询,大约需要 660 毫秒。
最后,其他测试告诉我,这不是列数,而是每行数据的大小。即 5 列,2 个字符宽 == 2 列,5 个字符宽。此外,请务必在您的移动设备上运行这些。您可以对这些进行单元测试,但由于我的 PC 上的马力明显更大,我发现时间差为 10-20 毫秒,而不是上面所示的近 1000 毫秒。
为什么?这只是一个猜测,但...
在移动世界中,DBMS 不可能是一样的。它不是企业数据库。在幕后我敢打赌,他们仍在执行 OLEDB“搜索”。
总的来说,在移动领域,我学会了设计我的数据库不是最“规范化”的,而是支持最常见的用例。祝你好运!