1. 程式人生 > >MySQL優化簡明指南

MySQL優化簡明指南

一、在編譯時優化MySQL 
如果你從原始碼分發安裝MySQL,要注意,編譯過程對以後的目標程式效能有重要的影響,不同的編譯方式可能得到類似的目標檔案,但效能可能相差很大,因此,在編譯安裝MySQL適應仔細根據你的應用型別選擇最可能好的編譯選項。這種定製的MySQL可以為你的應用提供最佳效能。

技巧:選用較好的編譯器和較好的編譯器選項,這樣應用可提高效能10-30%。(MySQL文件如是說)

1.1、使用pgcc(Pentium GCC)編譯器 
該編譯器(http://www.goof.com/pcg/)針對執行在奔騰處理器系統上的程式進行優化,用pgcc編譯MySQL原始碼,總體效能可提高10%。當然如果你的伺服器不是用奔騰處理器,就不必用它了,因為它是專為奔騰系統設計的。

1.2、僅使用你想使用的字符集編譯MySQL 
MySQL目前提供多達24種不同的字符集,為全球使用者以他們自己的語言插入或查看錶中的資料。卻省情況下,MySQL安裝所有者這些字符集,熱然而,最好的選擇是指選擇一種你需要的。如,禁止除Latin1字符集以外的所有其它字符集:


--------------------------------------------------------------------------------
%>./configure -with-extra-charsets=none [--other-configuration-options] 
--------------------------------------------------------------------------------

1.3、將mysqld編譯成靜態執行檔案 
將mysqld編譯成靜態執行檔案而無需共享庫也能獲得更好的效能。通過在配置時指定下列選項,可靜態編譯mysqld。


--------------------------------------------------------------------------------
%>./configure -with-mysqld-ldflags=-all-static [--other-configuration-options] 
--------------------------------------------------------------------------------

1.4、配置樣本 
下列配置命令常用於提高效能:


--------------------------------------------------------------------------------
%>CFLAGS="-O6 -mpentiumpro -fomit-frame-pointer" CXX=gcc CXXFLAGS="-O6 -mpentiumpro -fomit-frame-pointer -felide-constructors -fno-exceptions -fno-rtti" ./configure --prefix=/usr/local --enable-assembler --with-mysqld-ldflags=-all-static --disable-shared 
--------------------------------------------------------------------------------

二、調整伺服器 
確保運用正確的編譯固然重要,但這只是成功的第一步,配置眾多的MySQL變數同樣對伺服器的正常執行起關鍵作用。你可以將這些變數的賦值存在一個配置檔案中,以確保它們在每次啟動MySQL時均起作用,這個配置檔案就是my.cnf檔案。

MySQL已經提供了幾個my.cnf檔案的樣本,可在/usr/local/mysqld/share/mysql/目錄下找到。這些檔案分別命名為my-small.cnf、 my-medium.cnf、my-large.cnf和my-huge.cnf,規模說明可在描述配置檔案適用的系統型別標題中找到。如果在只有相當少記憶體的系統上執行MySQL,而且只是偶爾的用一下,那麼my-small.cnf會比較理想,因為它命令mysqld只使用最少的資源。類似地,如果你計劃構建電子商務超市,而且系統擁有2G記憶體,那麼你可能要用到mysql-huge.cnf檔案了。

為了利用這些檔案中的一個,你需要複製一個最適合需求的檔案,改名為my.cnf。你可以選擇使用配置檔案三種作用範圍的一種:

Global:將my.cnf檔案複製到伺服器的/etc目錄下,這使得配置檔案中的變數作用於全域性,即對所有伺服器上的MySQL資料庫伺服器有效。 
Local:將my.cnf檔案複製到[MYSQL-INSTALL-DIR]/var/目錄下,使得my.cnf作用於特定的伺服器。[MYSQL-INSTALL-DIR]表示MySQL安裝目錄。 
User:你可以再限制作用於特定的使用者,將my.cnf複製到使用者的根目錄下。 
究竟如何設定my.cnf中的這些變數呢?更進一步說,你可以設定哪一個變數。雖然所用變數對MySQL伺服器相對通用,每一個變數與MySQL的的某些元件有更特定的關係。如變數max_connects歸在mysqld類別下。執行下列命令即可知道:


--------------------------------------------------------------------------------
%>/usr/local/mysql/libexec/mysqld --help 
--------------------------------------------------------------------------------

它顯示大量的選項及與mysqld相關的變數。你可以很容易地在該行文字之下找出變數:


--------------------------------------------------------------------------------
Possible variables for option --set-variable (-O) are 
--------------------------------------------------------------------------------

然後你可以如下設定my.cnf中的那些變數: 

--------------------------------------------------------------------------------
set-variable = max_connections=100 
--------------------------------------------------------------------------------

它設定MySQL伺服器的最大併發連線數為100。要確保在my.cnf檔案中的[mysqld]標題下插入變數設定。 
三、表型別

很多MySQL使用者可能很驚訝,MySQL確實為使用者提供5種不同的表型別,稱為DBD、HEAP、ISAM、MERGE和MyIASM。DBD歸為事務安全類,而其他為非事務安全類。

3.1、事務安全

DBD 
Berkeley DB(DBD)表是支援事務處理的表,由Sleepycat軟體公司(http://www.sleepycat.com)開發。它提供MySQL使用者期待已久的功能-事務控制。事務控制在任何資料庫系統中都是一個極有價值的功能,因為它們確保一組命令能成功地執行。

3.2、非事務安全

HEAP 

HEAP表是MySQL中存取資料最快的表。這是因為他們使用儲存在動態記憶體中的一個雜湊索引。另一個要點是如果MySQL或伺服器崩潰,資料將丟失。 

ISAM 

ISAM表是早期MySQL版本的預設表型別,直到MyIASM開發出來。建議不要再使用它。 

MERGE 

MERGE是一個有趣的新型別,在3.23.25之後出現。一個MERGE表實際上是一個相同MyISAM表的集合,合併成一個表,主要是為了效率原因。這樣可以提高速度、搜尋效率、修復效率並節省磁碟空間。 

MyIASM 

這是MySQL的預設表型別。它基於IASM程式碼,但有很多有用的擴充套件。MyIASM比較好的原因: 

MyIASM表小於IASM表,所以使用較少資源。 
MyIASM表在不同的平臺上二進位制層可移植。 
更大的鍵碼尺寸,更大的鍵碼上限。 
3.3、指定表型別

你可在建立表時指定表的型別。下例建立一個HEAP表:


--------------------------------------------------------------------------------

mysql>CREATE TABLE email_addresses TYPE=HEAP (
    ->email char(55) NOT NULL,
    ->name char(30) NOT NULL,
    ->PRIMARY KEY(email) );


--------------------------------------------------------------------------------

BDB表需要一些配置工作,參見http://www.mysql.com/doc/B/D/BDB_overview.html。 

3.4、更多的表型別 

為了使MySQL管理工作更有趣,即將釋出的MySQL 4.0將提供兩種新的表型別,稱為Innobase和Gemeni。 

4、優化工具 

MySQL伺服器本身提供了幾條內建命令用於幫助優化。 

4.1、SHOW 

你可能有興趣知道MySQL伺服器究竟更了什麼,下列命令給出一個總結: 


--------------------------------------------------------------------------------
mysql>show status; 
--------------------------------------------------------------------------------

它給出了一個相當長的狀態變數及其值的列表。有些變數包含了異常終止客戶的數量、異常終止連線的數量、連線嘗試的次數、最大併發連線數和大量其他有用的資訊。這些資訊對找出系統問題和低效極具價值。 
SHOW還能做更多的事情。它可以顯示關於日誌檔案、特定資料庫、表、索引、程序和許可權表中有價值的資訊。詳見MySQL手冊。

4.2、EXPLAIN

當你面對SELECT語句時,EXPLAIN解釋SELECT命令如何被處理。這不僅對決定是否應該增加一個索引,而且對決定一個複雜的Join如何被MySQL處理都是有幫助的。

4.3、OPTIMIZE

OPTIMIZE語句允許你恢復空間和合並資料檔案碎片,對包含變長行的表進行了大量更新和刪除後,這樣做特別重要。OPTIMIZE目前只工作於MyIASM和BDB表。 
 

(http://www.fanqiang.com)
 

相關推薦

MySQL優化簡明指南

一、在編譯時優化MySQL  如果你從原始碼分發安裝MySQL,要注意,編譯過程對以後的目標程式效能有重要的影響,不同的編譯方式可能得到類似的目標檔案,但效能可能相差很大,因此,在編譯安裝MySQL適應仔細根據你的應用型別選擇最可能好的編譯選項。這種定製的MySQL可以為你的

必須掌握的MySQL優化指南

當 MySQL 單表記錄數過大時,增刪改查效能都會急劇下降,本文會提供一些優化參考,大家可以參考以下步驟來優化。 單表優化 除非單表資料未來會一直不斷上漲,否則不要一開始就考慮拆分,拆分會帶來邏輯、部署、運維的各種複雜度。 一般以整型值為主的表在千萬級以下,字串為主的表在五百萬以下是沒有太大問題的。 而

MySQL優化指南(簡單指北)

當MySQL單表記錄數過大時,增刪改查效能都會急劇下降,所以我們本文會提供一些優化參考,大家可以參考以下步驟來優化: 一、單表優化 除非單表資料未來會一直不斷上漲,否則不要一開始就考慮拆分,拆分會帶來邏輯、部署、運維的各種複雜度。一般以整型值為主的表在千萬級以下,字串為主

MySQL優化指南

當MySQL單表記錄數過大時,增刪改查效能都會急劇下降,可以參考以下步驟來優化: 單表優化 除非單表資料未來會一直不斷上漲,否則不要一開始就考慮拆分,拆分會帶來邏輯、部署、運維的各種複雜度,一般以整型值為主的表在千萬級以下,字串為主的表在五百萬以下是沒有太大問題的。而事實

老司機也必須掌握的MySQL優化指南

“當 MySQL 單表記錄數過大時,增刪改查效能都會急劇下降,本文會提供一些優化參考,大家可以參

MySQL優化四(優化表結構)

優化 最簡 ble 系統用戶 查找 表結構 今天 ash eat MySQL優化四(優化表) 昨晚吃吃喝喝的太多,熬夜到淩晨二點。今天頭發雜亂,臉龐憔悴,像是吸毒了。下午去買衣服,肚子一看大了不少。奈何女朋友還沒有一個,就已經發福了。管不住口,邁不開腿。 一、優化表結構

mysql優化

原因 選擇 int 並且 rep 多少 blog 查看 是把 給你一臺服務器讓你去優化,第一,先要去觀察問題,只有觀察到了問題,才能知道如何去優化。 先做基準測試,看看我們的服務器潛力到底有多大。 1.打開Mysql服務 2.查看我們

MySQL優化之——觸發器

strong ble define format def creat 存在 刪除 pda 轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/46763665 觸發器是一個特殊的存儲過程,不同的是存儲過程要

一.mysql優化

並且 網絡優化 聯合 適用場景 哪些 uniq -- res ini 一.mysql優化 1.網站請求走向分析優化的方面 需要優化的地方: a:網絡優化,服務器硬件方面,CDN加速(訪問離用戶最近一臺服務器獲取資源文件(jquery,js)) b:頁面靜態化處理,訪問速

小菜鳥mysql優化解決方案

mysql優化根據小菜鳥的個人習慣,自己的編寫的一套MYSQL優化方案,感覺還是有點兒菜,望大家諒解,不足之處,請大神們互動!#mysql優化解決方案#公共參數默認值:max_connections = 151#同事處理多大連接數,推薦設置最大連接數是上限連接數的80%左右sort_buffer_size =

MySQL優化之——為用戶開通mysql權限

article ont sdn blank con ges 轉載 tail targe 轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/46627263 為用戶開通mysql權限: grant

MySQL優化概述

查看 刪除 使用場景 lai 系統 incr 數據 建立 計算 MySQL優化概述 設計: 存儲引擎,字段類型,範式 功能: 索引,緩存,分區。 架構: 主從復制,讀寫分離,負載均衡。 合理SQL: 測試,經驗。 存儲引擎 Create tab

MySQL優化之——集群搭建步驟具體解釋

兩個 chgrp 應用服務 集群搭建 ria 進程 ini 而且 必須 轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/46833179 1 概述 MySQL Cluster 是MySQL 適合於

mysql-優化班學習-8-20170606-MySQL索引

ng- 文件 mar 索引 b+樹 xtend pen 自增列 .net MySQL索引 索引、事務、鎖、InnoDB引擎 tablespace\segment\extended\page\row gao

Mysql 優化學習

mysql Mysql 學習字節=8位二進制 中文2字節 英文1字節 bigint 8字節 int 4 字節 smallint 2 字節 tinyint 1 字節Mysql 優化學習

mysql 優化例子:IN 換 INNER JOIN

mysql今天擼代碼時,遇到SQL問題:要將A表查詢的ID,匹配B表的ID,並將B表全部內容查詢出來:未優化前:MySQL [xxuer]> SELECT -> COUNT(*) -> FROM -> t_cmdb_app_version

git - 簡明指南

lock index html 之前 itunes mat pat get 你在 助你入門 git 的簡明指南,木有高深內容 ;) 作者:羅傑·杜德勒 感謝:@tfnico, @fhd 和 Namics如有紕漏,請在 github 提報問題 安裝 下載 git

mysql-優化班學習-12-20170627-MySQL事務

src flush image when 數據 分享 mysql事務 log 學習 mysql-優化班學習-12-20170627-MySQL事務 MyRocks也支持事務 innodb_flush_log_at_trx_commit = 1sync_binl

Mysql優化之一(優化的目的以及方向)

span com mage nbsp 優化 數據 cnblogs strong pan   1.數據庫優化的目的      2.數據庫優化的方向 Mysql優化之一(優化的目的以及方向)

mysql 優化擴展

列表 insert 使用總結 部分 安全 結果 文本文 服務器 一行 一、SQL 優化 1、分析和定位策略 1、通過 show status 了解各種 SQL 的執行頻率 2、定位執行效率低的 SQL 語句:①通過慢日誌定位;②使用 show process