2

我有一个带有一张表的 SQL Mobile 数据库。它有几列包含有用的、经常查询的数据,还有一列存储每条记录相对较大的字符串(1000 多个字符),但不经常查询。

想象一下这个假模式,“lifeStory”字段是大的。

table1
String firstName
String lastName
String address
String lifeStory

一个有代表性的查询是

SELECT firstName, lastName, address FROM table1 WHERE firstName = :p1

有谁知道在这个表中留下那个大的、不经常查询的列的任何性能问题?

4

2 回答 2

3

除非您尝试实际查看/查询该字段中的数据,否则您不应该注意到任何性能损失。

于 2008-11-12T17:04:35.987 回答
3

使用 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“搜索”。

总的来说,在移动领域,我学会了设计我的数据库不是最“规范化”的,而是支持最常见的用例。祝你好运!

于 2008-11-25T18:32:52.897 回答