程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Monty說MySQL的優化(二)

Monty說MySQL的優化(二)

編輯:MySQL綜合教程

本文是Monty在O'Reilly Open Source Convention 2000大會上的演講之二,涉及優化應用、應該使用可移植的應用、更快的速度、優化MySQL、編譯和安裝MySQL五個方面,是篇詳盡的MySQL優化文檔

六、優化應用

應該集中精力解決問題。
在編寫應用時,應該決定什麼是最重要的:
速度
操作系統間的可移植性
SQL服務器間的可移植性
使用持續的連接。.
緩存應用中的數據以減少SQL服務器的負載。
不要查詢應用中不需要的列。
不要使用SELECT * FROM table_name...
測試應用的所有部分,但將大部分精力放在在可能最壞的合理的負載下的測試整體應用。通過以一種模塊化的方式進行,你應該能用一個快速“啞模塊”替代找到的瓶頸,然後很容易地標出下一個瓶頸。
如果在一個批處理中進行大量修改,使用LOCK TABLES。例如將多個UPDATES或DELETES集中在一起。

七、應該使用可移植的應用

Perl DBI/DBD
ODBC
JDBC
Python(或其他有普遍SQL接口的語言)
你應該只使用存在於所有目的SQL服務器中或可以很容易地用其他構造模擬的SQL構造。www.mysql.com上的Crash-me頁可以幫助你。
為操作系統/SQL服務器編寫包裝程序來提供缺少的功能。

八、如果你需要更快的速度,你應該:

找出瓶頸(CPU、磁盤、內存、SQL服務器、操作系統、API或應用)並集中全力解決。
使用給予你更快速度/靈活性的擴展。
逐漸了解SQL服務器以便能為你的問題使用可能最快的SQL構造並避免瓶頸。
優化表布局和查詢。
使用復制以獲得更快的選擇(select)速度。
如果你有一個慢速的網絡連接數據庫,使用壓縮客戶/服務器協議。
不要害怕時應用的第一個版本不能完美地移植,在你解決問題時,你總是可以在以後優化它。

九、優化MySQL

挑選編譯器和編譯選項。
位你的系統尋找最好的啟動選項。
通讀MySQL參考手冊並閱讀Paul DuBios的《MySQL》一書。(已有中文版-譯注)
多用EXPLAIN SELECT、SHOW VARIABLES、SHOW STATUS和SHOW PROCESSLIST。
了解查詢優化器的工作原理。
優化表的格式。
維護你的表(myisamchk、CHECK TABLE、 OPTIMIZE TABLE)
使用MySQL的擴展功能以讓一切快速完成。
如果你注意到了你將在很多場合需要某些函數,編寫MySQL UDF函數。
不要使用表級或列級的GRANT,除非你確實需要。
購買MySQL技術支持以幫助你解決問題:)

十、編譯和安裝MySQL

通過位你的系統挑選可能最好的編譯器,你通常可以獲得10-30%的性能提高。
在Linux/Intel平台上,用pgcc(gcc的奔騰芯片優化版)編譯MySQL。然而,二進制代碼將只能運行在Intel奔騰CPU上。
對於一種特定的平台,使用MySQL參考手冊上推薦的優化選項。
一般地,對特定CPU的原生編譯器(如Sparc的Sun Workshop)應該比gcc提供更好的性能,但不總是這樣。
用你將使用的字符集編譯MySQL。
靜態編譯生成mysqld的執行文件(用--with-mysqld-ldflags=all-static)並用strip sql/mysqld整理最終的執行文件。
注意,既然MySQL不使用C++擴展,不帶擴展支持編譯MySQL將贏得巨大的性能提高。
如果操作系統支持原生線程,使用原生線程(而不用mit-pthreads)。
用MySQL基准測試來測試最終的二進制代碼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved