Mysql效能優化小建議

2021-06-27 20:01:24 字數 2833 閱讀 4930

mysql的效能優化主要參考文章[1],[2]

,和[3],其中已使用且比較有效果的有:

(1)禁止autocommit, 防止每次插入都提交,重新整理log

set autocommit=0;

... sql import statements ...

commit;

(2) 對頻繁查詢的字段建立索引,但要注意加入索引後,執行插入操作時會變慢

(3)當只要一行資料時使用 limit 1

select 1 from tbl_name limit 1
注:select 1 是用來檢視是否有記錄的,並一般用作條件查詢(normally it will be used with where and often exists), 返回的所有行的值都是1。效率上來說,1>anycol>*,因為不用查字典表。

[4](4)永遠為每張表設定乙個id

為資料庫裡的每張表都設定乙個id做為其主鍵,而且最好的是乙個int型的(推薦使用unsigned),並設定上自動增加的auto_increment標誌。

(5)一次插入多行

insert into yourtable values (1,2), (5,5), ...;
下面對disk i/o和query_cache的優化做乙個總結,並假設我們使用的機器記憶體為8gb。以下的引數都在檔案my.cnf的[mysqld]下設定。

(1)innodb_buffer_pool_size 和 innodb_log_file_size

建議設定大小來自文章[5]

#

# set buffer pool size to 50-80% of your computer's memory

innodb_buffer_pool_size=4g

innodb_additional_mem_pool_size=256m

## set the log file size to about 25% of the buffer pool size

innodb_log_file_size=1g

innodb_log_buffer_size=256m

怎麼安全的更改這個配置,來自於

[6]

mysql -uroot -p... -e"set global innodb_fast_shutdown = 0"

service mysqld stop

rm -f /var/lib/mysql/ib_logfile[01]

service mysqld start

其中 service mysqld stop是centos下的命令,但ubuntu等其他linux系統可能實用service mysql stop

(2)query_cache_size

引數的說明見文章[7] ,但並未提到建議大小,反而提到設定太大也會有壞處。本人設定的大小如下:

query_cache_type=1

query_cache_limit=2m

query_cache_size=128m

其中query_chache_type=1表示開啟查詢快取,query_cache_size是總的查詢快取大小,query_cahce_limit表示單個查詢最大的快取大小。

設定完之後,執行以下操作便可:

service mysqld restart
(3) innodb_flush_method

innodb_flush_method設定成o_direct還是o_dsync,文章[2]中說設定成o_direct會增加效能,但在文章[8]和[2]中這兩個引數在實際使用時差不多,並且跟具體使用的硬體相關。所以設定成o_direct是否會優化效能,還不是很確定

(4)max_allowed_packet

此引數是當網路傳輸資料時,需要控制的引數,如果傳輸的資料太大(特別是當存在large blob columns or long strings資料時),超過max_allowed_packet的上限時,就有可能發生錯誤,所以就要提高此引數。本人的設定是:

max_allowed_packet = 16m
注:1. 檢視系統變數的一些命令

show variables like 'innodb_buffer%';

show global status like '%innodb%';

show global status like 'qc%';

2. 本人的配置

[3] mysql效能優化的最佳20+條經驗

[4] select 1 from ... sql語句中的1代表什麼意思?

[5] innodb configuration

[6] how to safely change mysql innodb variable 'innodb_log_file_size'?

[7] query cache configuration

[8] mysql setting variable innodb_flush_method to o_dsync or o_direct

Python效能優化小建議

1.盡量使用區域性變數 python 檢索區域性變數比檢索全域性變數快.這意味著,盡量避免 global 關鍵字.2.盡量使用 in 使用 in 關鍵字.簡潔而快速.for key in sequence print key3.當有大量字串連續相加時使用string的join 方法而不是使用 號 對...

MySQL效能優化的建議

為查詢快取優化你的查詢 explain 你的 select 查詢 當只要一行資料時使用 limit 1 為搜尋欄位建索引 在join表的時候使用相當型別的例,並將其索引 千萬不要 order by rand 避免 select 永遠為每張表設定乙個id 使用 enum 而不是 varchar 從 p...

mysql效能優化建議(一)

scheme設計與資料型別優化 選擇資料型別只要遵循小而簡單的原則就好,越小的資料型別通常會更快,占用更少的磁碟 記憶體,處理時需要的cpu週期也更少。越簡單的資料型別在計算時需要更少的cpu週期,比如,整型就比字元操作代價低,因而會使用整型來儲存ip位址,使用datetime來儲存時間,而不是使用...