此查询运行缓慢:
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以相同的速度执行......
那么......我还能改变什么改进呢? 感谢。
答案 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`);
除此之外(这是一个长镜头),我必须回应早期评论员关于索引的说法。