database - 提高Informix中SQL的性能

原文 标签 database informix

有谁能帮助我提高below sql的性能吗?数据库使用是informix

SELECT 
   informix.set_reason_codes.description as reason_code, 
   count(*) as number_of_calls
FROM 
informix.contact_history,
informix.set_reason_codes,
informix.customers
WHERE 
  (informix.contact_history.reason_code = informix.set_reason_codes.reason_code)
and ( ( informix.set_reason_codes.code_type = 'CONTACT_HISTORY' ) )
and ( informix.contact_history.customerkey = informix.customers.customerkey ) 
and ( informix.contact_history.call_type = 0 ) 
group 
   by informix.set_reason_codes.description  
order by 
   informix.set_reason_codes.description  

最佳答案

您需要在explain打开的情况下运行此sql来获取查询计划,即:

SET EXPLAIN ON;
SELECT ....

这将把优化程序的计划写入一个文件(实际位置取决于操作系统和连接方法)。
一旦你做到了这一点,你就可以更好地找出性能问题的原因。但通常,这可以归结为以下几点:
不适当的索引
过时或缺少索引统计信息
sqexplain文件中有关自动索引或顺序扫描的消息(在这些情况下,您可能希望嵌套循环(索引联接))是一个很好的指示器,需要进行一些调整。如果没有其他内容,运行查询并获得explain输出,然后执行,
UPDATE STATISTICS MEDIUM FOR TABLE informix.contact_history;
UPDATE STATISTICS MEDIUM FOR TABLE informix.set_reason_codes;
UPDATE STATISTICS MEDIUM FOR TABLE informix.customers;

如果在性能上得到了截然不同的结果并在查询计划中进行了报告,那么您就知道问题与统计数据有关。
了解您运行的informix的版本也很有用。

关于database - 提高Informix中SQL的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1475905/

相关文章:

c# - 连接状态已打开但无效?

mysql - MySQL 数据库的结构

apache-spark - 使用数据帧从 Informix 到 Spark 的 JDBC

c - Informix 到 Oracle : Dealing with Fetching Null Values

mysql - 当我的sql没有行返回时,如何返回0?

mysql - 如何使用 Rails 将一个应用程序数据库中的列更新为另一个应用程序数据库列

sql - plpgsql错误:“:”处或附近的语法错误

java - 通过值K-V数据库进行高速搜索

php - rhel6上的php pdo_informix-未实现可选功能

database - 可以在多个数据库空间之间共享一个 block 吗?