Informix 9.40 的 DBINFO('sqlca.sqlerrd1') 性能低下

low performance by DBINFO('sqlca.sqlerrd1') of Informix 9.40

插入一行后,我使用 DBINFO('sqlca.sqlerrd1') 读取插入行的序列号。 select 过程需要很长时间(5 - 10 秒)。 为了进行分析,我在插入命令

之前打开了 sqexplain
set explain on;
load from x  insert into  transaction;
SELECT distinct dbinfo('sqlca.sqlerrd1') FROM transaction;

输出:

QUERY:
        ------
        SELECT distinct dbinfo('sqlca.sqlerrd1') FROM transaction

        Estimated Cost: 353490
        Estimated # of Rows Returned: 10

          1) cms.transaction: SEQUENTIAL SCAN

我执行更新统计:

update statistics medium for table transaction;

但这没有帮助。为什么 SQL-Engine 执行顺序扫描? 如果我搜索 :

SELECT MAX (sernr ) from transaction;

(其中 sernr 是序列字段)SQL-带索引的引擎搜索。 这里输出:

QUERY:
        ------
        SELECT MAX (sernr ) from transaction

        Estimated Cost: 4
        Estimated # of Rows Returned: 1

           1) cms.transaction: INDEX PATH

           (1) Index Keys: sernr   (Key-Only)  (Aggregate)  (Serial, fragments: ALL)

我应该怎么做才能提高性能?

当您使用

SELECT distinct dbinfo('sqlca.sqlerrd1') FROM transaction;

您实际上正在读取 table transaction 中的所有行,return 正在读取每行中的 DBINFO('sqlca.sqlerrd1') 值。由于值始终相同,因此不同的只会 return 1 行。

你只需要 1 行,所以你可以使用这样的东西:

SELECT DBINFO('sqlca.sqlerrd1') FROM systables WHERE tabid = 1;