MySQL效能優化方案

2021-10-01 19:23:38 字數 2566 閱讀 4551

單機優化

索引分表

sql語句優化

關於mysql的優化,大體方案可以分為以下步驟

找出執行效率低的sql

分析慢的sql

進行優化

找出執行效率慢的sql(定位慢sql)

首先要明白原理,實際上我們在資料庫上面所做的操作都會被日誌記錄下來,我們在定位慢查詢就需要去通過日誌記錄來找到到底是哪條sql效率慢

查詢資料庫狀態的命令

執行了多久 show

status

like

'uptime'

;crud的執行次數

show

status

like

'%com_select%'

show

status

like

'%com_insert%'

show

status

like

'%com_update%'

show

status

like

'%com_delete%'

查詢所有的連線數

show

status

like

'connections'

查詢慢查詢次數(資料庫預設是10s,可以通過命令設定)

show

status

like

'slow_queries'

檢視和修改慢查詢時間閾值

show variables like 『long_query_time』 ;

//可以顯示當前慢查詢時間

set long_query_time=1;

//可以修改慢查詢時間

開啟慢查詢記錄日誌

因為我們的sql服務預設是沒有開啟滿記錄日誌的,所以我們並不能檢視慢查詢相關的記錄,需要我們手動開啟

進入到mysql資料夾下的bin目錄,通過cmd執行以下命令:mysqld.exe --safe-mode --slow-query-log

就可以開啟慢查詢記錄的日誌

慢記錄日誌的預設輸出位址在my.ini檔案中,通常預設是在c盤

慢記錄一般都會在開發和測試階段開啟,不要等到上線後再去檢查

分析sql語句

通過 explain 語句可以分析sql語句

資料庫設計三正規化

這是資料庫在設計之初我們預設都要遵守的規則

第一正規化:資料表中的列是不可分割的乙個整體

第二正規化:表中的記錄都需要乙個唯一標識(通常是主鍵)

第三正規化:表中不要有冗餘資料,大體意思就是一張表中不能出現另一張表除主鍵之外的字段

反三正規化設計

有時候為了提高效率,有時候就必須要通過反三正規化來進行設計,適當的保留冗餘資料

對於儲存設計,我們通常有兩種方式來進行設定

定長:會根據資料的型別來進行空間的分配,是固定的

邊長:根據儲存資料的大小來,用多少就分配多少

儲存引擎

資料庫的儲存引擎分類:innodb,myisam

innodb和myisam的區別首先我們要弄清楚乙個概念:什麼是索引,什麼時候用索引?

索引是資料庫優化的時候最物美價廉的東西,官方概念稱是幫助mysql提高查詢效率的一種資料結構,能夠幫我們快速的定位查詢到相應的位置

我們一般在資料量過多的表中或者需要查詢頻率比較高的字段上加上索引

注意:對於增刪改操作比較多的字段,不建議使用索引,即使查詢頻率較高

myisam和innodb都只支援btree索引演算法,而memory/heap同時支援btree和hash演算法

索引分類

此外,我們害可以建立復合索引(多列索引,就是在多個列上面建立一樣的索引

復合索引使用事項:分表的方式有垂直分表和水平分表兩種

垂直分表

垂直分表是根據字段進行分表,我們通常會遇到這種需求,有些表記錄的資料並不是很多,但是欄位卻非常的多,每次查詢起來會執行大量的i/o,影響效能,這時候我們就可以進行垂直分表

水平分表

水平分表是根據記錄來進行分表,如果乙個表的記錄太多的話,不用想,自然會影響到查詢的效率,比如上千萬條,而且需要經常檢索,那麼我們就有必要進行水平分表了

水平分表其實很好理解,比如乙個一千萬記錄的表,我們可以根據記錄數分成十張一百萬的表,第一張就是一到一百萬,一次往後…

有時候會遇到這種需求,加入需要查詢第五百萬條到第八百三十二萬條怎麼辦呢,這時候我們可以用union和union all來把結果集進行聯合

水平分表中的id我們可以通過主鍵自增、uuid、雪花演算法等來進行求出

最簡單的一種hash演算法:t_user+id%100(分表數)+1

ddl優化

dml優化

將多條結構相關的sql語句合併味一條

dql優化

Mysql效能優化方案

這種做法可以將你的資料庫的資料從開始的乙個資料庫分成了3個,比如第乙個資料庫複製儲存使用者資訊,第二個儲存商品資訊,第三個儲存 缺點 當你的 資料庫1 炸了,整合專案就執行不起來了 不安全 多搞幾個資料庫來儲存資料,假設有三颱伺服器,一主二僕,即以太主伺服器,二台從伺服器 把你的主伺服器的資料複製在...

mysql效能優化 mysql效能優化

優化方式 1.空間換時間 冗餘 2.時間換空間 字段優先使用型別 int date char varchar text 索引型別 btree索引 hash索引 索引的葉子下,存放乙個資訊指向所在行的資料位址。btree有利於範圍查詢,hash有利於精確查詢。btree用的更多一些。btree索引的常...

mysql的效能優化 mysql效能優化

檢視安裝指令碼 select version 非互動式超時時間,如jdbc show global variables like wait timeout 互動式超時時間,如資料庫工具 show global variables like interactive timeout show sessi...