mysql 阿里雲 優化 MySQL效能優化速記

2021-10-18 01:35:48 字數 3861 閱讀 5946

優化簡介

mysql資料庫優化是多方面的,原則是減少系統的瓶頸,減少資源的占用,增加系統的反應速度。

在mysql中,可以通過show status 語句查詢一些mysql的效能引數。如查詢連線次數,可以執行如下語句:

show status like 'connections';

如果要查詢慢查詢次數,可以執行如下語句:

show status like 'slow_queries';

一些常用的效能引數如下:

– connections:連線mysql伺服器的次數;

– uptime:mysql伺服器的上線時間;

– slow_queries:慢查詢的次數;

– com_select:查詢操作的次數(select可以換insert,update,delete,分別查詢插入、更新、刪除的次數)。

mysql資料庫優化可以從三方面考慮,分別是優化查詢、優化資料庫結構、優化mysql資料庫。

優化查詢

分析查詢語句。

利用索引來加快查詢速度。

優化子查詢。

分析查詢語句

通過對查詢語句的分析,可以了解查詢語句的執**況。mysql中提供了explain 和describe 來分析查詢語句。

示例如下:

explain select * from `user` where username = 'admin';

結果如圖示:

幾個引數說明一下:

– id:select識別 符。這是select的查詢序列號。

– select_type:表示select語句的型別。

– table:表示查詢的表。

– type:表示表的連線型別。all表示 進行了全表掃瞄。這是最壞的結果。

– key:表示查詢實際使用到的索引。

– key_len:表示mysql選擇的索引欄位按位元組計算的長度。

– ref:表示使用哪個列或常數與索引一起來查詢記錄。

– rows:顯示mysql在表中進行查詢時必須檢查的行數。

– extra:表示mysql在處理查詢時的詳細資訊。

利用索引來加快查詢速度

mysql中提高效能的乙個最有效的方式就是對資料表設計合理的索引。索引提供了高效的查詢資料的方法,並且加快了查詢速度。如分析查詢語句中,顯示的type為all 就是表示進行了全表掃瞄,沒有使用索引的情況。對username 新增乙個名為username_index 普通索引,再來分析查詢語句,結果如圖示:

可以看到,type型別變為ref,這表示從表中讀取所有匹配的行,用於索引既不是unique也不是primary key 的情況,或者查詢中使用了索引列的左子集,即索引中左邊的部分列組合。

使用索引有幾種特殊情況,在這些情況下,有可能使用帶有索引的字段查詢時,索引並沒有起效,下面介紹一下這幾種特殊的情況。

使用like關鍵字的查詢語句。

在使用like關鍵字進行查詢的語句中,如果匹配字串的第乙個字元為「%」,索引不會起作用。只有「%」不在第乙個位置,索引才會起作用。

使用多列索引的查詢語句。

mysql可以為多個字段建立索引。乙個索引可以包括16個字段。對於多列索引,只有查詢條件中使用了這些欄位中的第乙個欄位時,索引才會起作用。

使用or關鍵字的查詢語句。

查詢語句的查詢條件中只有or關鍵字,且or前後的兩個條件中的列都是索引時,查詢中才使用索引。否則,查詢將不使用索引。

優化子查詢

子查詢可以一次性完成很多邏輯上需要多個步驟才能完成的sql操作。子查詢雖然可以使查詢語句很靈活,但是執行效率不高。執行子查詢時,mysql需要為內層查詢語句的查詢結果建立乙個臨時表。然後外層查詢語句從臨時表中查詢記錄。查詢完畢後,再撤銷這些臨時表。因此,子查詢的速度會受到一定的影響。

在mysql中,可以使用連線(join)查詢來替代子查詢。連線查詢不需要建立臨時表,其速度比子查詢要快。

優化資料庫結構

合理的資料庫結構不僅可以使資料庫占用更小的磁碟空間,而且能夠使查詢速度更快。資料庫結構的設計,需要考慮資料冗餘、查詢和更新的速度、欄位的資料型別是否合理等多方面的內容。

將字段很多的表分解成多個表

對於字段很多的表,如果有些欄位的使用頻率很低,可以將這些字段分離出來形成新錶。因為當乙個表的資料量很大時,會由於使用頻率低的字段存在而變慢。

增加中間表

對於需要經常聯合查詢的表,可以建立中間表以提高查詢效率。通過建立中間表,把需要經常聯合查詢的資料插入到中間表中,然後將原來的聯合查詢改為對中間表的查詢,以此來提高查詢效率。

增加冗餘字段

設計資料庫表時應盡量遵循正規化理論的規約,盡可能減少冗餘字段,讓資料庫設計看起來精緻、優雅。但是,合理地加入冗餘字段可以提高查詢速度。

優化插入記錄的速度

插入記錄時,影響插入速度的主要是索引、唯一性校驗、一次插入記錄條數等。可以分別對此進行針對性優化。

分析表、檢查表和優化表

mysql提供了分析表、檢查表和優化表的語句。分析表主要是分析關鍵字的分布;檢查表主要是檢查表是否存在錯誤;優化表主要是消除刪除或者更新造成的空間浪費。

分析表:analyze table 表名;

檢查表:check table 表名;

優化表:optimize table 表名;(只能優化表中的varchar、blob或text型別的字段)

上述的這三個方法,資料庫系統都會自動對錶加乙個唯讀鎖。在分析表期間,只能讀取表中的記錄,不能更新和插入記錄。在多數場景下,不需要使用優化表,即使對可變長度的行進行了大量的更新,也不需要經常執行,每週一次或每月一次即可,並且只需要對特定的表執行。

優化mysql伺服器

優化伺服器硬體

伺服器的硬體效能直接決定著mysql資料庫的效能。硬體的效能瓶頸,也決定了資料庫的執行速度和效率。一般常用的優化伺服器硬體的方法如下:

1. 配置較大的記憶體。

2. 配置高速磁碟系統,以減少讀盤的等待時間,提高響應速度。

3. 合理分布磁碟i/o,把磁碟i/o分散在多個裝置上,以減少資源競爭,提高並行操作能力。

4. 配置多處理器,mysql是多執行緒的資料庫,多處理器可同時執行多個執行緒。

優化mysql的引數

通過優化mysql的引數可以提高資源利用率,從而達到提高mysql伺服器效能的目的。

mysql服務的配置引數都在my.cnf或者my.ini檔案的[mysqld]組中。其中:

key_buffer_size:表示索引緩衝區的大小。索引緩衝區所有的執行緒共享。合理的緩衝區大小可以更好處理索引。

table_cache:表示同時開啟表的個數。

query_cache_size:表示查詢緩衝區的大小。

innodb_buffer_pool_size:表示innodb型別的表和索引的最大快取。值越大,查詢的速度就會越快。

max_connections:表示最大連線數,該值不是越大越好,過多的連線數可能會導致mysql伺服器僵死。

……其它略。

補充1.索引是不是越多越好?

合理的索引可以提高查詢速度,但是索引也不是越多越好。在執行插入語句前,mysql要為新插入的記錄建立索引,所以過多的索引會導致插入操作變慢。

2. 如何使用查詢緩衝區?

查詢緩衝區可以提高查詢速度,但是只適合查詢語句比較多、更新語句比較少的情況,具體方式參照優化mysql引數。

阿里雲mysql安裝

這個過程很簡單,但是其實得益於這個5.5的版本沒有嚴重bug,之前我嘗試過很多其他版本的安裝包,以及其他安裝方法,都有各種莫名其妙的bug,而且嘗試了網上所說的各種修改方法都沒用,而這個,在我嘗試了多個阿里雲系統伺服器後,這種安裝模式均沒有問題,最穩定 1.首先清除5.1版本的多餘包 有些阿里雲版本...

安裝mysql 阿里雲centos

li dijkstra 關注 原創 3粉絲 2喜歡51 等級 訪問 937 積分 43 排名 182萬 qq客服 客服論壇 招聘廣告服務 經營性 備案資訊 網路110報警服務 中國網際網路舉報中心 原阿里雲伺服器linux centos 中mysql5.7安裝以及完整的配置 2018年02月23日 ...

阿里雲 yum安裝mysql

2.yum install yum utils y 裝源 3.yum config manager disable mysql56 community 禁用mysql5.6的源 4.yum config manager enable mysql57 community dmr 啟用mysql5.7的...