MySQL資料庫優化分析

2021-09-24 07:58:02 字數 2258 閱讀 1973

資料庫優化一方面是找出系統的瓶頸,提高mysql資料庫的整體效能,而另一方面需要合理的結構設計和引數調整,以提高使用者的相應速度,同時還要盡可能的節約系統資源,以便讓系統提供更大的負荷.

優化分為了兩大類,軟優化和硬優化,軟優化一般是運算元據庫即可,而硬優化則是操作伺服器硬體及引數設定.

1.首先我們可以用explain或describe(簡寫:desc)命令分析一條查詢語句的執行資訊.

2.例:

desc select * from `user`複製**
顯示:

其中會顯示索引和查詢資料讀取資料條數等資訊.

在mysql中,盡量使用join來代替子查詢.因為子查詢需要巢狀查詢,巢狀查詢時會建立一張臨時表,臨時表的建立和刪除都會有較大的系統開銷,而連線查詢不會建立臨時表,因此效率比巢狀子查詢高.

索引是提高資料庫查詢速度最重要的方法之一,關於索引可以參高筆者like關鍵字匹配'%'開頭的字串,不會使用索引.

or關鍵字的兩個字段必須都是用了索引,該查詢才會使用索引.

使用多列索引必須滿足最左匹配.

對於欄位較多的表,如果某些字段使用頻率較低,此時應當,將其分離出來從而形成新的表,

對於將大量連線查詢的表可以建立中間表,從而減少在查詢時造成的連線耗時.

類似於建立中間表,增加冗餘也是為了減少連線查詢.

分析表主要是分析表中關鍵字的分布,檢查表主要是檢查表中是否存在錯誤,優化表主要是消除刪除或更新造成的表空間浪費.

1. 分析表: 使用 analyze 關鍵字,如analyze table user;

op:表示執行的操作.

msg_type:資訊型別,有status,info,note,warning,error.

msg_text:顯示資訊.

2. 檢查表: 使用 check關鍵字,如check table user [option]

option 只對myisam有效,共五個引數值:

quick:不掃瞄行,不檢查錯誤的連線.

fast:只檢查沒有正確關閉的表.

changed:只檢查上次檢查後被更改的表和沒被正確關閉的表.

medium:掃瞄行,以驗證被刪除的連線是有效的,也可以計算各行關鍵字校驗和.

extended:最全面的的檢查,對每行關鍵字全面查詢.

3. 優化表:使用optimize關鍵字,如optimize [local|no_write_to_binlog] table user;

local|no_write_to_binlog都是表示不寫入日誌.,優化表只對varchar,blob和text有效,通過optimize table語句可以消除檔案碎片,在執行過程中會加上唯讀鎖.

1.配置多核心和頻率高的cpu,多核心可以執行多個執行緒.

2.配置大記憶體,提高記憶體,即可提高快取區容量,因此能減少磁碟i/o時間,從而提高響應速度.

3.配置高速磁碟或合理分布磁碟:高速磁碟提高i/o,分布磁碟能提高並行操作的能力.

優化資料庫引數可以提高資源利用率,從而提高mysql伺服器效能.mysql服務的配置引數都在my.cnf或my.ini,下面列出效能影響較大的幾個引數.

因為資料庫壓力過大,首先乙個問題就是高峰期系統效能可能會降低,因為資料庫負載過高對效能會有影響。另外乙個,壓力過大把你的資料庫給搞掛了怎麼辦?所以此時你必須得對系統做分庫分表 + 讀寫分離,也就是把乙個庫拆分為多個庫,部署在多個資料庫服務上,這時作為主庫承載寫入請求。然後每個主庫都掛載至少乙個從庫,由從庫來承載讀請求。

如果使用者量越來越大,此時你可以不停的加機器,比如說系統層面不停加機器,就可以承載更高的併發請求。然後資料庫層面如果寫入併發越來越高,就擴容加資料庫伺服器,通過分庫分表是可以支援擴容機器的,如果資料庫層面的讀併發越來越高,就擴容加更多的從庫。但是這裡有乙個很大的問題:資料庫其實本身不是用來承載高併發請求的,所以通常來說,資料庫單機每秒承載的併發就在幾千的數量級,而且資料庫使用的機器都是比較高配置,比較昂貴的機器,成本很高。如果你就是簡單的不停的加機器,其實是不對的。所以在高併發架構裡通常都有快取這個環節,快取系統的設計就是為了承載高併發而生。所以單機承載的併發量都在每秒幾萬,甚至每秒數十萬,對高併發的承載能力比資料庫系統要高出一到兩個數量級。所以你完全可以根據系統的業務特性,對那種寫少讀多的請求,引入快取集群。具體來說,就是在寫資料庫的時候同時寫乙份資料到快取集群裡,然後用快取集群來承載大部分的讀請求。這樣的話,通過快取集群,就可以用更少的機器資源承載更高的併發。

乙個完整而複雜的高併發系統架構中,一定會包含:各種複雜的自研基礎架構系統。各種精妙的架構設計.因此一篇小文頂多具有拋磚引玉的效果,但是資料庫優化的思想差不多就這些了.

資料庫 索引優化分析 索引簡介

mysql官方對索引的定義為 索引 index 是幫助mysql高效獲取資料的資料結構。可以得到索引的本質 索引是資料結構。索引的目的在於提高查詢效率,可以模擬字典。可以將索引理解為 排好序的快速查詢資料結構 在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指...

mysql 資料庫優化,分表超作

create table ifnot exists table1 id int 11 not null auto increment,name varchar 50 default null primary key id engine myisam default charset utf8 auto...

MySQL索引優化分析

1.通過訂單號查詢某個訂單,用唯一索引 資料量幾百萬以上 2.order by 排序時,後面欄位加 強制指定索引 select from orderforce index idx ordere order by order level,input date 哪些情況需要建索引 1 主鍵,唯一索引 2...