提高加入性能

时间:2012-06-13 22:54:09

标签: mysql sql performance join

此查询运行缓慢:

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以相同的速度执行......

那么......我还能改变什么改进呢? 感谢。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

如果表格很大,您可以使用临时表获得一些改进,而不是让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`);

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