此文章主要向大家介紹的是MySQL數據庫優化其中還包括MySQL數據庫的性能優化 常用的SQL語句的優化以及MySQL數據庫對INSERT語句進行優化的實際操作方案的描述望你會有所收獲
MySQL InnoDB 的性能問題討論
MySQL性能優化
InnoDB delete from xxx速度暴慢原因
推薦圈子: mysql研究
更多相關推薦 定期分析表和檢查表
分析表的語法如下
引用
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb_name[ tbl_name]
以上語句用於分析和存儲表的關鍵字分布分析的結果將可以使得系統得到准確的統計信息使得SQL能夠生成正確的執行計劃如果用戶感覺實際執行計劃並不是預期的執行計劃執行一次分析表可能會解決問題在分析期間使用一個讀取鎖定對表進行鎖定這對於MyISAMDBD和InnoDB表有作用
例如分析一個數據表
引用
analyze table table_name
檢查表的語法如下
引用
CHECK TABLE tb_name[tbl_name][option]option = {QUICK | FAST | MEDIUM | EXTENDED | CHANGED}
檢查表的作用是檢查一個或多個表是否有錯誤CHECK TABLE 對MyISAM 和 InnoDB表有作用對於MyISAM表關鍵字統計數據被更新
CHECK TABLE 也可以檢查視圖是否有錯誤比如在視圖定義中被引用的表不存在
定期優化表
MySQL數據庫優化表的語法如下
引用
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb_name [tbl_name]
如果刪除了表的一大部分或者如果已經對含有可變長度行的表(含有 VARCHARBLOB或TEXT列的表)進行更多更改則應使用OPTIMIZE TABLE命令來進行表優化這個命令可以將表中的空間碎片進行合並並且可以消除由於刪除或者更新造成的空間浪費但OPTIMIZE TABLE 命令只對MyISAM BDB 和InnoDB表起作用
例如 optimize table table_name
注意 analyzecheckoptimize執行期間將對表進行鎖定因此一定注意要在數據庫不繁忙的時候執行相關的操作
常用的SQL優化
我們在開發的時候常常用到的SQL語句無非是INSERTGROUPBY等等對於這些SQL語句我們怎麼進行優化?
大批量插入數據
當用load命令導入數據的時候適當的設置可以提高導入的速度
對於MyISAM存儲引擎的表可以通過如下方式快速的導入大量的數據
引用
ALTER TABLE tb_name DISABLE KEYS;
loading the data
ALTER TABLE tb_name ENABLE KEYS;
DISABLE KEYS 和 ENABLE KEYS 用來打開或者關閉MyISAM表非唯一索引的更新在導入大量的數據到一個非空的MyISAM表時通過設置這兩個命令可以提高導入的效率
對於導入大量的數據到一個空的MyISAM表時默認就是先導入數據然後才創建索引的索引不用進行設置
引用
load data infile /home/mysql/text_txt into table text
對於InnoDB類型的表這種方式不能提高導入數據的效率但也有幾種針對InnoDB類型的表進行MySQL數據庫優化的方式
因為InnoDB類型的表式按照主鍵的順序保存的所以將導入的數據按照主鍵的順序排序可以有效提高導入數據的效率
在導入數據前執行 SET UNIQUE_CHECKS=關閉唯一性校驗在導入結束後執行SET UNIQUE_CHECKS=恢復唯一性校驗可以提高導入的效率
如果應用使用自動提交的方式建議在導入前執行SET AUTOCOMMIT=關閉自動提交導入結束後執行SET AUTOCOMMIT=打開自動提交也可以提高導入效率
MySQL數據庫優化INSERT語句
當進行數據INSERT的時候可以考慮采用以下幾種方式進行優化
如果同時從一個客戶插入很多行盡量使用多個值表的INSERT語句這種方式將大大縮短客戶端與數據庫的鏈接關閉等消耗使得效率比分開執行的單個INSERT語句快
例如
insert into test values()
insert into test values()
insert into test values()
將上面三句改為:insert into test values()()()
如果從不同客戶插入很多行能通過使用INSERT DELAYED 語句得到更高的速度
DELAYED 的含義是讓INSERT 語句馬上執行其實數據都被放在內存的隊列中並沒有真正寫入磁盤這比每條語句分別插入要快得多LOW_PRIORITY剛好相反在所有其他用戶對表的讀寫完後才進行插入
將索引文件和數據文件分在不同的磁盤上存放
如果進行批量插入可以增加bulk_insert_buffer_size變量值的方法來提高速度但是這只能對於MyISAM表使用
當從一個文本文件中裝載一個表時使用LOAD DATA INFILE 這通常比使用很多insert語句快倍左右
以上的相關內容就是對MySQL數據庫優化方法的介紹望你能有所收獲
From:http://tw.wingwit.com/Article/program/MySQL/201311/29324.html