簡體   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