2010-05-26 50 views
11

我一直在使用MySQL多年,主要是在較小的項目上,直到去年左右。我不確定這是語言的本質還是我缺乏真正的教程,這讓我感到不確定自己寫的內容是否是用於優化目的和縮放目的的正確方法。成爲MySQL專家的最快方法?

在PHP雖然自學成才的,我很相信我自己和我寫的代碼,可以輕鬆地把它比作他人等等。

對於MySQL,我不確定是否(以及在什麼情況下)應該使用INNER JOIN或LEFT JOIN,也不知道它具有大量的功能。雖然我已經爲處理數千萬條記錄的數據庫編寫代碼,但我不知道它是否是最優的。我經常發現一個小小的調整會使查詢的時間少於原始時間的1/10 ......但是我怎麼知道我目前的查詢速度並不慢呢?

我想成爲在優化數據庫和可擴展性的能力,本場完全有信心。使用不是一個問題 - 我以多種不同的方式每天使用它。

所以,問題是,路徑是什麼?讀一本書?網站/教程?建議?

+0

FWIW除了特定於MySQL的優化外,還描述了一般SQL。如果您在查找教程或指南時遇到問題,可能是因爲您嘗試的搜索範圍過窄? – 2010-05-26 02:56:36

+0

你看,我會說SQL,但我一直遇到這樣的事實,即人們堅持認爲SQL有點不同,功能更強大,其他功能。我很高興你在這裏說同樣的話。 – 2010-05-26 03:12:43

回答

4

EXPLAIN是你的朋友之一。如果你學會使用這個工具,你應該能夠非常有效地優化你的查詢。

  • 掃描MySQL手冊並閱讀Paul DuBois的MySQL書籍。
  • 使用EXPLAIN SELECT,SHOW VARIABLES,SHOW STATUS和SHOW PROCESSLIST。
  • 瞭解查詢優化器的工作方式。
  • 優化您的表格格式。
  • 維護您的表(myisamchk,CHECK TABLE,OPTIMIZE TABLE)。
  • 使用MySQL擴展更快地完成工作。
  • 寫的MySQL UDF功能,如果你發現你需要在很多地方一些 功能。
  • 不要在表級別或列級使用GRANT如果你並不真的需要它 。

http://dev.mysql.com/tech-resources/presentations/presentation-oscon2000-20000719/index.html

5

只有成爲專家的方式是經驗,通常需要時間。和一個好的導師比你更好地教導你缺少什麼。問題是你不知道你不知道什麼。

+0

對 - 我同意,我已經花了3年半的全職程序員,而且我在其他許多領域都有專家,其中一些我比MySQL花費的時間少。我想要採取下一步。 – 2010-05-26 02:21:57

2

研究和經驗 - 如果你沒有項目,以保證研究,使他們。製作包含相關數據的三張表並組成場景。

E.g.

製作電影的表及其數據

使用戶

表讓收視率表,爲用戶

花時間學習如何加入工作,如何讓特定等級的電影範圍在一個查詢中,如何搜索電影表(如正則表達式) - 如前所述,使用解釋來了解不同的事物對速度的影響。製作一天;我保證你的 處理就會大大增加。

如果您仍然在努力解決案例情況,請在SO上尋找問題並自行嘗試這些方案。

+1

高級級別 - 查看評級電影時哪些用戶的品味最相似。儘管這可能需要在存儲過程或PHP中完成。 – 2010-05-26 03:46:25

1

正如其他人所說,時間和練習是唯一真正的方法。

實際上,我發現EXPLAIN爲我個人創造了奇蹟。學習讀取輸出結果可能是我能夠編寫高效查詢所取得的最大的一次飛躍。

我發現真正有用的第二件事是SQL Tuning by Dan Tow,它描述了一種相當正式的提取性能的方法。這有點牽扯,但在很多情況下運作良好。如果沒有別的,它會讓你更好地理解聯接的處理方式。

0

開始與像這樣的一類:https://www.udemy.com/sql-mysql-databases/

然後使用你學到的東西用於創建和管理多個SQL數據庫和運行查詢。達到專家水平實際上是關於實踐。但是,當然你需要在練習之前學習這些作品。