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