Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何组合两个查询以提高性能_Mysql_Sql_Database - Fatal编程技术网

Mysql 如何组合两个查询以提高性能

Mysql 如何组合两个查询以提高性能,mysql,sql,database,Mysql,Sql,Database,我目前正在使用的系统是一个遗留系统。第一个查询的结果没有问题,只是查询将通过循环使用第一个查询的结果检索另一个值。我尝试将查询从order by id更改为order by date,因为如果表是order by id,我会对某些帐户产生一些问题。我还尝试更改查询,因为它当前非常缓慢。我确实将这两个查询组合在一起,但执行起来需要很长时间。 如何将两个查询连接在一起而不影响性能 /*我提到的这个查询在第一个查询中没有问题*/ SELECT DATE_FORMAT('2016-12-12 00:00

我目前正在使用的系统是一个遗留系统。第一个查询的结果没有问题,只是查询将通过循环使用第一个查询的结果检索另一个值。我尝试将查询从order by id更改为order by date,因为如果表是order by id,我会对某些帐户产生一些问题。我还尝试更改查询,因为它当前非常缓慢。我确实将这两个查询组合在一起,但执行起来需要很长时间。 如何将两个查询连接在一起而不影响性能

/*我提到的这个查询在第一个查询中没有问题*/

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;

你能分享一下这个计划吗?在第三个查询中,有和t.date`我编辑了查询,但仍然需要很长时间才能执行。表中已经有索引了。你能分享解释计划吗?在第三个查询中,有和t.date`我编辑了查询,但仍然需要很长时间才能执行。表中已包含索引。