Database Informix数据库表更新

Database Informix数据库表更新,database,informix,Database,Informix,informix数据库表中有2.3亿条记录,我们将表划分为4个部分,但插入/更新2000条记录仍需要大约80秒,有人能建议将时间缩短到20秒以下吗?使用光标可能会大大加快速度。但请记住,在冲洗或关闭行之前,行可能无法用于“drity read”。 我不知道您使用的是哪种语言,所以我选择4js慷慨为例 PREPARE p FROM "INSERT INTO mytable VALUES(?, ?, ?)" DECLARE c CURSOR FOR p OPEN c WHILE (...there'

informix数据库表中有2.3亿条记录,我们将表划分为4个部分,但插入/更新2000条记录仍需要大约80秒,有人能建议将时间缩短到20秒以下吗?

使用光标可能会大大加快速度。但请记住,在冲洗或关闭行之前,行可能无法用于“drity read”。 我不知道您使用的是哪种语言,所以我选择4js慷慨为例

PREPARE p FROM "INSERT INTO mytable VALUES(?, ?, ?)"
DECLARE c CURSOR FOR p
OPEN c
WHILE (...there's more data to process...)

    PUT c USING v1, v2, v3
END WHILE
CLOSE c

设置PDQ优先级可以是一个。此外,在创建(右侧)索引后更新统计信息(高)会有很大帮助。

索引是否针对您正在寻找的操作进行了优化?是的,是否有任何临时表或缓存技术可用于此?在这个问题中,信息非常少。2.3亿条记录是一个相当大的数字,但行有多宽?每行是4字节、400字节还是4000字节?您正在进行的更新的性质是什么?您是否让DBMS对每一行执行复杂的计算?是否正在更新键列(主键或外键的一部分)?您正在更新索引列吗?您是在运行单个UPDATE语句,还是在使用UPDATE…cursor_name的当前位置,并使系统将每一行发送到客户端并返回到服务器?您是否每次都执行搜索更新,而不是以前的替代方案?更新是从与服务器相同的机器上驱动的,还是它们是分开的?如何分开(往返消息时间)?更新运行时还发生了什么?您的交易结构如何?你有多少逻辑日志?服务器通常是如何配置的?您使用的是什么类型的磁盘?你提到分为4个部分-这在实践中意味着什么?您正在使用哪个版本的Informix,以及在哪个o/s上使用它?部分或全部这可能是一个因素。正如Jonathans的问题一样,你说的是“插入/更新”,插入与更新的比率是多少?您首先尝试的是插入还是更新?您是否比较了“重复更新时插入”和“未更新行时更新插入”的性能。