inoformix中加快sql的执行速度的方法

1.select 语句中使用sort,或join

如果你有排序和连接操作,你可以先select数据到一个临时表中,然后再对临时表进行处理。因为临时表是建立在内存中,所以比建立在磁盘上表操作要快的多。

如:

SELECT time_records.*, case_name  

FROM time_records, OUTER cases  

WHERE time_records.client = "AA1000"  

AND time_records.case_no = cases.case_no  

ORDER BY time_records.case_no  


这个语句返回34个经过排序的记录,花费了5分钟42秒。而:

SELECT time_records.*, case_name  

FROM time_records, OUTER cases  

WHERE time_records.client = "AA1000"  

AND time_records.case_no = cases.case_no  

INTO temp foo;  

SELECT * from foo ORDER BY case_no  

返回34条记录,只花费了59秒。
我也来说两句 查看全部回复

最新回复

  • 维护者 (2008-4-26 17:33:41)

    2.使用not in 或者not exists 语句

    下面的语句看上去没有任何问题,但是可能执行的非常慢:

    SELECT code FROM table1  

    WHERE code NOT IN ( SELECT code FROM table2   


    如果使用下面的方法:

    SELECT code, 0 flag  

    FROM table1  

    INTO TEMP tflag;  

    然后:

    UPDATE tflag SET flag = 1

    WHERE code IN ( SELECT code  

    FROM table2  

    WHERE tflag.code = table2.code ;  

    然后:

    SELECT * FROM  

    tflag  

    WHERE flag = 0;  

    看上去也许要花费更长的时间,但是你会发现不是这样。

    事实上这种方式效率更快。有可能第一种方法也会很快,那是在对相关的每个字段都建立了索引的情况下,但是那显然不是一个好的注意。
  • 维护者 (2008-4-26 17:35:10)

    3.避免使用过多的“or"

    如果有可能的话,尽量避免过多地使用or:

    WHERE a = "B" OR a = "C"  

    要比  

    WHERE a IN ("B","C")  

    慢。

    有时甚至UNION会比OR要快。
  • 维护者 (2008-4-26 17:36:34)

    4.使用索引。

    在所有的join和order by 的字段上建立索引。  
    在where中的大多数字段建立索引。  
    WHERE datecol >= "this/date" AND datecol <= "that/date"  
    要比  
    WHERE datecol BETWEEN "this/date" AND "that/date" 慢