數據庫優化思路與方向
mysql> show status like 'valus'
connections //鏈接參數
uptime //上線時間
slow_queries //慢查詢次數
com_select
com_insert
com_update
com_delete
二、優化查詢:
mysql> explain select * from handb.fruits;
+----+-------------+--------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | fruits | ALL | NULL | NULL | NULL | NULL | 2 | |
+----+-------------+--------+------+---------------+------+---------+------+------+-------+
table查詢表的次數
possible_keys索引
key當前索引
key_len索引長度
ref一起查詢的列或者常數
rows必要行數
Extra詳細信息
三、索引對查詢的影響
四、優化數據庫結構
1、拆分舊表形成新表
2、增加中間表
五、插入優化
1、禁用索引
mysql> alter table book disable keys;
mysql> alter table book enable keys;
2、禁用唯一查詢
mysql> set unique_checks=0 | 1 ; //0關閉 1開啟
3、禁用外鍵檢查
mysql> set foreign_key_checks=0 | 1
4、禁用自動提交
mysql> set autocommit=0 | 1
六、分析檢查優化表
mysql> analyze table fruits;
type:status 常態
info信息 //有重復信息
note註意 //有null空值
warning警告 //超過過慢查詢時間
error錯誤 //表中有錯誤選項,不可用
七、檢查表
mysql> check table fruits fast;
QUICK:不掃描。不檢查錯誤的鏈接。
FAST:只檢查沒有被正確關閉的表。
CHANGED:只檢查上次檢查後被更改的表和沒有被正確關閉的表。
MEDIUM:掃描行,以驗證被刪除的鏈接是有效的,也可以計算各行的關鍵字效驗和,並使用計算出的效驗和驗證這一點。
EXTENDED:對每行的所有附件自進行一個全面的關鍵字查找,這可以確保表示百分百一致的,但是花費時間較長。
八、mysql服務器優化
緩沖區:希望被更改的數據在內存中駐留的時間更長而產生,主要是保留臟頁信息在內存中。不接受內存的管理,但是接受mysql程序的管理。
保證緩沖區大小:
[mysqld]
query_cache_size=512M
query_cache_type=1 //0表示不適用緩沖區。
1表示一旦開啟,所有的查詢都將使用緩沖區。如果不希望從緩沖區查詢,需要在select語句後增加選項no_sql_cache,表示當前查詢不適用緩沖區查詢。
2表示,只有在查詢的select是增加sql_cache才會從緩沖區查找。
key_buffer_size //索引緩沖區大小。索引緩沖區的所有線程共享。他的大小取決於內存的大小。太大會導致頻繁換頁,也會降低系統性能。
table_cache //同時打開的表的個數。越大表示同時打開的表越多。太大影響系統性能。
sort_buffer_size //排序緩存大小,越大,表示排序速度越快。提高order by和group by的效率默認2M
read_buffer_size //每個表分配的緩沖區的大小。當線程連續掃描時,才會使用這個緩沖區。
read_md_buffer_size //每個線程保留的緩沖區的大小,與上面相似,但是用於特定順序才會使用。如果出現連續掃描與讀取,則調整該參數。set session read_md_buffer_size = n
innodb_buffer_pool_size //innodb和索引的最大緩存,越大查詢越快
max_connections //表示數據庫的最大連接數。主要浪費內存大小。(大於系統最大鏈接數,會死機)
innodb_flush_log_at_trx_commit //表示緩沖區數據什麽時候寫入到日誌中,並且將日誌寫入到磁盤當中。該值有三個值:
0每隔一秒將數據寫入日誌,再寫入硬盤。不安全,但是速度快
1每次提交事務的時候才寫入日誌,再寫入硬盤。安全,但是速度慢
2每次提交事務的時候寫入日誌,每隔一秒寫入硬盤。出現故障會丟失1-2s數據。
back_log //表示多少個請求可以存放在堆棧中。對TCP/IP的監聽列隊的大小。不接受新請求之前把數據放在緩存。只有希望一個短時間內有很多鏈接,才啟用此值。操作系統的列隊限制比mysql更大,不能超過,否則無效。
interactive_timeout //關閉服務器鏈接前的等待時間。
thread_buffer_size //每個需要排序的線程分配的緩沖區的大小,如果有很多新的線程,可以調高這個值。
wait_timeout //服務器關閉一個鏈接所等待的時間s,默認28800
數據庫優化思路與方向