所以,我在使用Postgresql时目睹了以下行为.
我有这样一个表:(id INTEGER …,msg VARCHAR(2000))
然后我运行两个完全相同的程序A和B,
即进行20000次插入然后进行20000次检索(基于其ID).唯一的
区别在于程序A使用包含消息的插入
B只插入包含最多10个字符的消息.
问题是所有插入和检索的平均时间
在A中总是比在B中少约15ms,这实际上没有意义,
因为A正在添加“更大”的数据.
关于为什么会发生这种情况的任何想法或提示?可能是不使用时
msg的所有字符系统使用其余空间用于其他目的,因此如果msg已满,系统会更快?
基于@Dan Bracuk的评论.我节省了不同事件的时间,并意识到发生以下情况,在程序A中有很多次插入真的非常快,而在程序B中从来都不是这样的,这就是为什么平均A比B快但我不能解释这种行为.
如果没有关于您的设置和程序的更多细节,我无法重现这一点,所以以下只是一个有根据的猜测.可以想象你的观察是由TOAST引起的.一旦文本字段超过特定大小,它就存储在物理上独立的表中.因此,主表实际上小于所有文本值以内联方式存储的情况,因此搜索可能更快.
原文链接:https://www.f2er.com/postgresql/192116.html