mysql - 有什么办法可以加快 MySQL 查询速度吗?

标签 mysql kuali

当“FROM”子句只有一个帐号 (a.account_nbr) 和一个目标代码 (a.fin_object_cd) 时,下面的查询运行得很快,但是当我修改查询以使 FROM 子句具有范围时帐号和一系列目标代码,需要很长时间才能返回结果。运行时间从大约一分钟延长到 20 分钟或更长时间。

查询确实返回了我想要的结果,但我需要让它运行得更快。

我能做什么?我不确定向某些列添加索引是否有帮助,或者是否有更好的方法来编写查询。

如果您需要有关表格或我想要完成的任务的更多信息,请告诉我。

select 
a.account_nbr as "Account Number", 
a.account_nm as "Account Name", 
a.fin_object_cd as "Object Code", 
a.fin_obj_cd_nm as "Object Code Name", 

(select COALESCE(sum(fin_beg_bal_ln_amt),0) from kfsprd.gl_balance_t where account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and univ_fiscal_yr = "2015" and fin_balance_typ_cd != "CB") as "Beginning Balance",

(select COALESCE(sum(trn_ldgr_entr_amt),0) FROM kfsprd.kf_f_transaction_dtl where univ_fiscal_yr = "2015" and account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and trn_debit_crdt_cd = "D") as "Debits",
(select COALESCE(sum(trn_ldgr_entr_amt),0) FROM kfsprd.kf_f_transaction_dtl where univ_fiscal_yr = "2015" and account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and trn_debit_crdt_cd = "C" and trn_ldgr_entr_amt is not null) as "Credits",

(
(select COALESCE(sum(fin_beg_bal_ln_amt),0) from kfsprd.gl_balance_t where account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and univ_fiscal_yr = "2015" and fin_balance_typ_cd != "CB") +
(select COALESCE(sum(trn_ldgr_entr_amt),0) FROM kfsprd.kf_f_transaction_dtl where univ_fiscal_yr = "2015" and account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and trn_debit_crdt_cd = "D") -
(select COALESCE(sum(trn_ldgr_entr_amt),0) FROM kfsprd.kf_f_transaction_dtl where univ_fiscal_yr = "2015" and account_nbr = a.account_nbr and fin_object_cd = a.fin_object_cd and trn_debit_crdt_cd = "C") 
) as "Ending Balance"

from kfsprd.kf_f_transaction_dtl a where univ_fiscal_yr = "2015" and (univ_fiscal_prd_cd between "01" and "13" or 
univ_fiscal_prd_cd = "BB") and a.account_nbr between "1014000" and "1014005" and a.fin_object_cd between "0000" and "9999" and a.fin_balance_typ_cd != "CB"
group by account_nbr, fin_object_cd
order by account_nbr, fin_object_cd;

最佳答案

您可以将 fin_coa_cd 添加到 where 子句吗?如果该表与原始表 (gl_entry_t) 具有相同的主键,则该表的前 3 列将为 univ_fiscal_yr、fin_coa_cd 和 account_nbr。如果您有要使用的图表代码,它可能会帮助 Oracle 在主查询中使用该索引。

关于mysql - 有什么办法可以加快 MySQL 查询速度吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29975536/

相关文章:

mysql - EF 迁移时出错 - Azure - 应用程序上的 MySQL

php - 如何在采购订单表单中插入多个 `product` 和多个其他变量

Python:使用MySql数据库的Django框架

ojb - 扩展 Kuali Document 业务对象

kuali - 如何解决构建 Kuali Student 时缺少的类 org.slf4j.helpers.MarkerIgnoringBase

oracle - kuali - ORA-01017 : invalid username/password; logon denied

oracle - Io 异常 : Oracle Error ORA-12650 after upgrading Oracle to 12g

mysql - 将 JSON 文件导入 MySQL 5.7

java - Java中的Mysql : Data truncated for column 'AAL' at row 1 error