如何结合两个查询来提高性能

时间:2017-08-01 09:07:16

标签: mysql sql database

我目前正在处理的系统是遗留系统。第一个查询的结果没有问题,只是查询将通过循环使用第一个查询的结果检索另一个值。我尝试将查询从“按ID排序”更改为“按日期排序”,因为如果表是按ID排序,我对某个帐户有一些问题。我也尝试更改查询,因为它目前非常慢。我确实将两个查询组合在一起,但执行时间很长。 如何在不影响性能的情况下将2个查询连接在一起?

/ *我提到的这个查询没有问题(第一次查询)* /

SELECT
DATE_FORMAT('2016-12-12 00:00:00', '%Y-%m-%d') AS date,
C.id AS account_id,
C.account_no,
C.account_name,
B.amount AS last_topup,
DATE_FORMAT('2016-12-12 23:59:59', '%Y-%m-%d') AS topup_date,
NULL AS balance
FROM (SELECT
      account_id,
      MAX(date) date
      FROM table1
      GROUP BY account_id) A 
INNER JOIN table1 B
USING (account_id, date)
RIGHT JOIN table2 C ON B.account_id = C.id
ORDER BY C.account_no;

/ *循环查询(第二次查询)* /

SELECT
`t`.`balance_after` AS `balance`
FROM table3 `t`
WHERE `t`.`account_id` = '<id from the loop>' AND `t`.`date` <= '2017-07-26 
23:59:59'
ORDER BY `t`.`date` DESC;

/ *我将两者合并的查询(需要很长时间才能执行* /

SELECT
DATE_FORMAT('2016-12-12 00:00:00', '%Y-%m-%d') AS date,
C.id AS account_id,
C.account_no,
C.account_name,
B.amount AS last_topup,
DATE_FORMAT('2016-12-12 23:59:59', '%Y-%m-%d') AS topup_date,
D.balance_after AS balance
FROM (SELECT
      account_id,
      MAX(date) date
      FROM table1
      GROUP BY account_id) A 
INNER JOIN table1 B
USING (account_id, date)
RIGHT JOIN table2 C ON B.account_id = C.id
RIGHT JOIN table3 D ON B.account_id = D.account_id
WHERE D.date <= "2017-07-30 23:59:59"
ORDER BY C.account_no;

0 个答案:

没有答案