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來儲存時間,而不是使用...