8

因此,我在使用 PostgreSQL 时目睹了以下行为。

我有一个这样的表:(id INTEGER ..., msg VARCHAR(2000)) 然后我运行两个程序AB它们做的事情完全相同,即进行 20000 次插入,然后进行 20000 次检索(基于它们的 id)。唯一的区别是程序A插入包含 2000 个字符的消息,而B只插入最多包含 10 个字符的消息。

问题是所有插入和检索的平均时间A总是比其中少约 15 毫秒,因为添加“更大”的数据是B没有意义的。A

关于为什么会发生这种情况的任何想法或提示?可能是当不使用msg系统的所有字符时,将其余空间用于其他目的,因此如果msg已满,系统会更快?

基于@Dan Bracuk 评论。我节省了不同事件的时间,并意识到以下情况发生了,在程序A中有很多次插入非常快,而在程序B中从来没有这种情况,这就是为什么平均速度AB但我也无法解释这种行为.

4

1 回答 1

2

如果没有有关您的设置和程序的更多详细信息,我无法重现此内容,因此以下只是有根据的猜测。可以想象,您的观察是由于 TOAST。一旦文本字段超过一定大小,它就会存储在物理上单独的表中。因此,主表实际上比所有文本值都内联存储的情况要小,因此搜索速度会更快。

于 2013-11-11T17:45:24.820 回答