[英]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.