2010-06-18 74 views
-2

在mysql中的優化笏是我必須講述的主題嗎?有這麼多的東西.......mysql和php ...我想了解優化

+5

問這樣一個普遍的問題類似於詢問「如何在不提供問題或任何代碼的情況下讓代碼更快運行」。如果您有優化感興趣的代碼示例,請將其發佈到此處,而您可能會了解更多信息。 – 2010-06-18 09:53:35

回答

1

首先 - 分析你的代碼/ sql找到緩慢的地方。

第二 - 只優化這些緩慢的地方,不要嘗試優化已經很快,或從未運行。

1

MySQL的一些優化提示:

SQL_NO_CACHE

的SQL_NO_CACHE提示關閉MySQL的內置查詢緩存機制特定查詢。您可以通過在高度動態的查詢(例如關鍵字搜索或每晚只運行一次的報表)上使用此提示來幫助MySQL使查詢緩存更有效。確保查詢緩存已打開,否則不需要此命令。

SQL_CACHE

如果在安裝MySQL查詢緩存來顯式模式(設置query_cache_type的= 2),那麼你可以使用SQL_CACHE提示告訴MySQL哪些查詢緩存。

HIGH_PRIORITY

的HIGH_PRIORITY提示可以在SELECT或INSERT語句中,讓MySQL的知道,這是一個高優先級查詢。這個提示基本上允許查詢跳過。

LOW_PRIORITY

的LOW_PRIORITY暗示可以在INSERT和UPDATE語句中使用。如果使用LOW_PRIORITY關鍵字,則會延遲查詢的執行,直到沒有其他客戶端正在從表中讀取數據。這意味着您可能會等待很長時間,或者永遠在讀取量很大的服務器上。

延遲插入

的INSERT LOW_PRIORITY statment不會返回,直到該語句已被執行,這有可能是永遠。相反,您可以使用INSERT DELAYED語句。它會立即返回,但它仍然會等到其他客戶端在執行語句之前關閉表。

注意:INSERT DELAYED只適用於MyISAM,MEMORY和ARCHIVE表。 STRAIGHT_JOIN

該提示將告訴MySQL按照它們在FROM子句中指定的順序連接表。

使用EXPLAIN確保MySQL尚未找出最佳連接順序。如果你指定了一個錯誤的順序,你可以讓MySQL做更多的工作。 SQL_BUFFER_RESULT

此提示告訴MySQL將查詢結果放入臨時表中。當結果集被髮送到客戶端時,這將釋放表鎖。所以你只想在大的結果集上使用它。

SQL_BIG_RESULT

的SQL_BIG_RESULT提示可以用DISTINCT和GROUP BY的SELECT語句中使用。正如你可能猜到的那樣,告訴MySQL結果集會很大。據MySQL文檔,如果調用

MySQL directly uses disk-based temporary tables if needed, and prefers sorting to using a temporary table with a key on the GROUP BY elements. 

SQL_SMALL_RESULT

你可能會猜到這是相當多SQL_BIG_RESULT相反。啓用時,MySQL使用快速臨時表來存儲結果表,而不是使用排序。由於這通常是優化器的默認路由,因此通常不需要此提示。

+0

mysql docs頁面的url會比一個巨大的複製粘貼更好 – 2010-06-18 10:15:02

+1

我喜歡複製和粘貼,使事情更易消化 – Haroldo 2010-06-18 11:07:39