MySQL6 效能優化

2021-08-28 19:40:46 字數 2409 閱讀 2542

效能優化

優化mysql資料庫是資料庫管理員和資料庫開發人員的必備技能。mysql優化,一方面是找出系統的瓶頸,提高mysql資料庫的整體效能;一方面需要合理的結構設計和引數調整,以提高使用者操作響應的速度;同時應該盡可能節省系統資源,以便系統可以提供更大負荷的服務。

mysql資料庫優化是多方面的,有幾條優化原則:

1、減少系統的瓶頸

2、減少資源的占用

3、增加系統的反應速度

優化查詢

1、索引對查詢的影響

我有乙個book表,裡面有10條記錄,沒有索引查詢的時候:

使用了索引:

看到不使用索引的時候rows為10,也就是說掃瞄了表中的10條記錄,而使用索引,rows為1,說明掃瞄了表中的1條記錄,其查詢速度自然比不使用索引快。而且possible_keys和key的值都是bknameidx,說明查詢時使用了bknameidx索引

2、使用索引查詢

使用索引查詢有幾種特殊情況,特別提一下:

(1)使用like關鍵字的查詢語句

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

(2)使用多列索引的查詢語句

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

(3)使用or關鍵字的查詢語句

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

3、避免使用select *命令

從表中讀取的資料越多,查詢會變得越慢,始終指定需要的列,是乙個良好的習慣

4、永遠為每張表設定乙個id

我們應該為資料庫裡的每張表都設定乙個id作為其主鍵,而且最好是乙個int型的,並設定上自動增加的auto_increment標識。就算有些varchar欄位型別的值,它永遠不會重複,也不要設定為主鍵,使用varchar型別來當主鍵會使效能下降

資料庫結構優化

乙個好的資料庫設計方案對於資料庫的效能常常會起到事半功倍的效果,合理的資料庫結構不僅可以使資料庫占用更小的磁碟空間,而且能夠使查詢速度更快。資料庫結構的設計,需要考慮資料冗餘、查詢和更新的速度、欄位的資料型別是否合理等多方面內容。

下面提供幾條優化資料庫結構的建議:

1、將字段很多的表分解為多個表

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

2、增加中間表

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

3、優化插入記錄的速度

插入記錄時,影響插入速度的主要是索引、唯一性校驗、一次插入記錄條數等,根據這些情況,可以分別進行優化(以使用innodb的表為例):

(1)禁用唯一性檢查

插入資料時,mysql會對插入的記錄進行唯一性校驗。這種唯一性校驗也會降低插入記錄的速度,為了降低這種情況對查詢速度的影響,可以在插入記錄之前禁用唯一性檢查,等到記錄插入完畢之後再開啟:

set unique_checks = 0;
開啟唯一性檢查:

set unique_checks = 1;
(2)禁用外來鍵檢查插入資料之前禁止對外鍵的檢查,資料插入之後再恢復對外鍵的檢查,禁用外來鍵檢查的語句如下:

set foreign_key_checks = 0;
恢復對外鍵檢查的語句為:

set foreign_key_checks = 1;
(3)禁止自動提交插入資料之前禁止事物的自動提交,資料匯入完成之後,執行恢復自動提交操作。禁止自動提交的語句如下:

set autocommit = 0;
恢復自動提交的語句為:

set autocommit = 1;

MySQL 6 資料排序

當使用select語句從表中查詢資料時,結果集不會按任何順序排序。要對結果集排序,請使用order by子句。order by子句允許您 desc 降序 asc 公升序 預設 order by columns,也可對多個字段進行排序,同時允許對表示式結果進行排序 field函式 不在排序內會出現在最...

MYSQL(6)資料操作1

1.插入資料紀錄 1 插入完整資料紀錄 insert into table name 欄位1,欄位2.values value1,value2.欄位1,欄位2.可省略,子要順序一致即可 2 插入一部分 insert into table name 欄位1,欄位2.values value1,valu...

高效能的MySQL(6)查詢慢與重構查詢

只有好的庫表結構 合理的索引還不夠,我們還需要合理的設計查詢,齊頭並進,乙個不少才能充分發揮mysql的優勢。一 查詢為什麼會慢?每乙個查詢由一系列的子任務組成,每個子任務都會消耗一定的時間。這個我們在之前的單個查詢分析時已經簡單介紹了,當然還有額外的因素,比方說包括網路,cpu計算,統計資訊,執行...