mysql管理之索引改造
作為mysql dba需要定期的檢視伺服器的索引情況,尤其是當你到了乙個新的環境,開始接手一些資料庫的維護工作,需要對線上伺服器的索引使用情況有所了解。如果索引設定不合理,會導致伺服器的效能受到非常大的影響,尤其是當sql語句又比較複雜(比如多表聯合查詢等),本來就來大致介紹一下線上資料庫的索引改造,本文只是對個人的工作總結,如果大家有更好的索引改造方案,也請指點。
這裡提到的索引改造主要分成如下幾個階段:
一、去除重複的索引
1.為什麼要去除重複的索引
a.多餘的索引占用磁碟空間,會引起不必要的磁碟io
b.多餘的索引會導致資料庫在進行索引選擇的時候變慢,尤其是索引越多的時候越突出(主要是相關聯的索引才會影響索引選擇)
c.重複的索引會導致表的更新變慢
2.如何找出重複的索引
這裡給大家介紹乙個好用的工具,maatkit工具安裝完成以後就會有乙個mk-duplicate-key-checker命令,這個命令就是檢測資料庫中存在的重複索引,並會自動生成刪除重複索引的語句,非常方便。下面介紹maatkit工具的安裝和mk-duplicate-key-checker命令的使用。
maatkit工具的安裝:
wget
tar zxvf maatkit-7540.tar.gz
cd maatkit-7540
perl makefile.pl
make install
mk-duplicate-key-checker命令的使用:
mk-duplicate-key-checker --databases=databasename --user=root
--password=passwd
這裡只需要制定資料庫名,使用者名稱以及密碼,如果還想知道其他的一些引數,可以使用命令mk-duplicate-key-checker –help檢視。
備註:提醒大家一下,在執行完刪除重複索引的語句之後,還需要再用這個工具重新檢測一下,因為刪除重複之後還可能會出現新的重複索引,尤其是phpcms v9的資料庫。
二、去除不必要的索引
何為不必要的索引:我的理解是有一些字段辨識度很低的,比如abolish欄位只有0和1,就沒有必要建立索引,因為使用索引和全表掃瞄的速度差不多甚至肯能使用索引掃瞄會更慢。如果實在要建立,就根據查詢情況和其他的字段建立組合索引效果會更好。
1.為什麼要去除不必要的索引
這個理由和去除重複的索引差不多,這裡就不詳述。
2.如何找出不必要的索引
可以通過information_schema的statistics表找出類似的索引,然後再經過人工過濾,應該還有更好的辦法,呵呵。比如如下查詢,能查詢出制定庫的辨識度低的列索引:
select table_name,index_name,column_name,cardinality from
`information_schema`.`statistics` where table_schema='databasename' and
cardinality<=5;
大家可以根據自己的實際情況來排查。
三、新增必須的索引
何為必須的索引:我的理解比較簡單就是會影響到查詢效能的索引就是必須的索引
1.為什麼要新增必須的索引
必須的索引會影響到資料庫的查詢效能,很簡單又很充分的理由,呵呵!
2.如何找出必須的索引
關於這個問題,我認為是比較有技術含量的,我的步驟如下:
a.找出效能差或者沒有使用到索引的sql語句
要找出效能差或者沒有使用到索引的sql語句,需要做一些設定,比如將long_query_time設定成0.2秒左右,這個根據自己的環境來定,開啟log_queries_not_using_indexes引數,可以通過set global
log_queries_not_using_indexes=on;命令開啟。
可以通過mysqldumpslow命令來對慢查詢日誌進行統計,比如按照執行時間長短來提取或者按照執行次數來提取或者查詢記錄數來提取。列舉兩個非常常用的組合:
mysqldumpslow -s t -t 10 slow.log#找出10條消耗時間最長的慢查詢sql
mysqldumpslow -s c -t 10 slow.log#找出10條執行次數最多的滿查詢sq
b.通過explain和profiling分析效能差和沒有用到索引的sql,確定需要新增的索引(也可能需要改寫對應的sql,這個不在本文的討論範圍),關於explain和profiling的用法讀者可以自己檢視相關的文件,這裡不贅述。
MySQL 業務查詢
1.查詢本月交易金額最高的卡號 select distinct cardid from transinfo where transmoney select from 2.查詢掛失賬號的客戶資訊 使用子查詢n或內連線查詢inner join select from userinfo where cus...
車輛維修管理系統mysql 汽車維修業務管理軟體
一 產品簡介 汽車維修業務管理軟體是面向汽車維修企業,為其提供對維修管理 財務結算 配件管理 客戶管理等業務的資訊化管理手段,實現車輛維修的過程化管理,並通過嚴格的財務流程及準確的庫存管理,提高工作效率和服務質量,降低管理成本。二 管理目標 1 實現維修 配件 財務等資訊的一體化管理,實時監控企業運...
zlk管理mysql日誌 Mysql日誌管理
mysql日誌管理 mysql日誌分為 二進位制檔案 錯誤日誌 刪除日誌檔案 在mysql軟體所支援的日誌檔案裡。除了二進位制檔案外,其他日誌檔案都是文字檔案 預設情況下。mysql軟體只會啟動錯誤日誌檔案,而其他日誌檔案則需要手動啟動才可以被啟動。mysql軟體所支援的日誌 二進位制日誌檔案 該日...