1. 程式人生 > >提高 MySQL 效能之常用技巧

提高 MySQL 效能之常用技巧

基準測試工具:

http_load

sysbench

查看錶相關操作:

show create table [table_name];

describe [table_name];

show table status like [table_name];

查詢技巧:

select articID, GROUP_CONCAT(type) from Articstocktotal GROUP BY articID;(彙總之後,字串方式連線type列)

記錄慢查詢日誌:

set slow_query_log=ON;

long_query_time=0;(記錄所有查詢,單位毫秒)

開啟執行語句查詢:

set profiling=ON;

檢視所有已經記錄下來的查詢(查詢的 id 及 耗時):

show profiles;

根據查詢的 id 顯示查詢的具體操作耗時:

show profile for query [query_id];

以上語句可以確定每個查詢的執行具體耗時.

分頁查詢延遲關聯技巧:

select * from [table_name] t_a left join [select id from [table_name] [where [conditions]] limit [start, length] ];

以上語句主要是先根據條件和分頁查詢出id,這樣資料庫引擎會快速的剔除不符合條件的id,從而達到提高效能的目的(不用將全部資料載入).

檢視查詢生成的臨時表等:

flush status;

show status where variable_name like '%create%' or variable_name like '%handler%';

檢視索引資訊:

show index from [table_name];

cardinalty(基數)表示索引列有多少不同的取值,MyIASA精準,InnoDB估算.innodb_stats_sample_pages變數用來控制InnoDB取樣的索引頁數(預設8),一旦使用以上語句就會觸發統計資訊的更新,MySQL客戶端或監控程式也會不時觸發統計資訊的更新,這樣會造成伺服器的壓力,尤其是資料特別大的時候.

analyze table [table_name];(手動分析統計資訊)

innodb_stats_on_metadata 引數用來控制因MySQL客戶端或者監控程式觸發的統計資訊更新.

innodb_stats_persistent 引數用來控制是否持久化統計資訊.

索引碎片:

行碎片,行間碎片,剩餘空間碎片

MyISAM 會全部出現,可以通過 optimize table [table_name] 或者 匯出再匯入資料重新整理資料.

InnoDB 不會出現短小的行碎片,因為他會移動短小的行並重寫到一個新的片中,InnoDB 可以通過刪除再重建索引的方式來消除碎片.

對於不支援 optimize table [table_name] 指令的引擎,可以通過 alter table [table_name] engine=[origin_engine] 的方式,不做任何操作來重新建表,標準版本的 MySQL 可能只會重建聚簇索引.