admin

SQL Mobile的性能,其中有一个未被选中的大列

sql

我有一个带一个表的SQL
Mobile数据库。它具有多列包含有用且经常查询的数据的列,以及一列为每条记录存储相对大的字符串(1000个以上的字符)的字符串,该字符串不经常被查询。

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

table1
String firstName
String lastName
String address
String lifeStory

一个代表性的查询将是

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

没有人知道任何性能问题会在该表中留下如此大的,不经常查询的列吗?


阅读 140

收藏
2021-06-07

共1个答案

admin

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

总体而言,在移动领域中,我学会了设计DB并不是最“规范化”的,而是支持最常见的用例的。祝你好运!

2021-06-07