繁体   English   中英

改善加入绩效

[英]Improve a Join performance

该查询运行缓慢:

SELECT UserAccountNumber, balance, username FROM users JOIN balances ON 
users.UserAccountNumber=balances.UserAccountNumber WHERE date < “2011-02-02”

我该怎么做才能改善其性能?

我考虑过使用用户ID进行联接,而不是使用userAccountNumber。 据我所知,Appart形成了JOIN和WHERE users.id = balances.idUser以相同的速度执行...

所以..我还能改变些什么来改善它? 谢谢。

该查询本身对我来说还可以,但是请确保您在UserAccountNumber列(因为它们参与了联接)和date (您正在搜索的列)上都有索引。 如果数据库必须对大量记录进行顺序扫描,那将会很慢。 使用EXPLAIN SELECT可以帮助您了解数据库实际上是如何执行查询的。

如果表很大,使用临时表可能会有所改善,而不是让MySQL的优化程序为您解决。 当然,这将是一个权衡。

CREATE TEMPORARY TABLE `tmp_balances`
(
  `UserAccountNumber` INT,
  `balance` INT,
  INDEX (`UserAccountNumber`)
) ENGINE=MEMORY
SELECT `UserAccountNumber`, `balance`
FROM balances
WHERE date < "2011-02-02";

SELECT `tmp_balances`.`UserAccountNumber`, 
    `tmp_balances`.`balance`, 
    `users`.`username`
FROM `tmp_balances` INNER JOIN users USING (`UserAccountNumber`);

除此之外(这是一个长镜头),我不得不回应早期评论者关于索引的说法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM