mysql調優書籍 mysql調優從書寫sql開始

2021-10-17 12:08:09 字數 1920 閱讀 3028

理論知識

mysql 的執行機制

mysql 的sql關鍵字執行順序

1、mysql 的優化方案有哪些?

1、mysql 資料庫常見的優化手段分為三個層面:

sql 和索引優化

資料庫結構優化

系統硬體優化等

前兩個可以通過日常的書寫sql來實現,養成好的習慣可以事半功倍。

2、sql 和索引優化習慣準則:

習慣1:我們應該盡可能的使用主鍵查詢,而非其他索引查詢,因為主鍵查詢不會觸發回表查詢,因此節省了一部分時間,變相的提高了查詢的效能。

習慣2:避免在 where 查詢條件中使用 != 或者 <> 操作符,因為這些操作符會導致查詢引擎放棄索引而進行全表掃瞄。

習慣3:(查詢具體的字段而非全部字段)要盡量避免使用 select *,而是查詢需要的字段,這樣可以提公升速度,以及減少網路傳輸的頻寬壓力。

習慣4:(優化子查詢)盡量使用 join 語句來替代子查詢,因為子查詢是巢狀查詢,而巢狀查詢會新建立一張臨時表,而臨時表的建立與銷毀會占用一定的系統資源以及花費一定的時間,但 join 語句並不會建立臨時表,因此效能會更高。

習慣5:(注意查詢結果集)我們要盡量使用小表驅動大表的方式進行查詢,也就是如果 b 表的資料小於 a 表的資料,那執行的順序就是先查 b 表再查 a 表。

習慣6:(不要在列上進行運算操作)不要在列字段上進行算術運算或其他表示式運算,否則可能會導致查詢引擎無法正確使用索引,從而影響了查詢的效率。

習慣7:(適當增加冗餘字段)增加冗餘字段可以減少大量的連表查詢,因為多張表的連表查詢效能很低,所有可以適當的增加冗餘字段,以減少多張表的關聯查詢,這是以空間換時間的優化策略。

3、資料庫結構優化習慣準則

習慣1:(最小資料長度)一般說來資料庫的表越小,那麼它的查詢速度就越快,因此為了提高表的效率,應該將表的字段設定的盡可能小,比如身份證號,可以設定為 char(18) 就不要設定為 varchar(18)。

習慣2:(使用最簡單資料型別)能使用 int 型別就不要使用 varchar 型別,因為 int 型別比 varchar 型別的查詢效率更高。

習慣3:(盡量少定義 text 型別)text 型別的查詢效率很低,如果必須要使用 text 定義字段,可以把此字段分離成子表,需要查詢此字段時使用聯合查詢,這樣可以提高主表的查詢效率。

習慣4:(適當分表、分庫策略)分表和分庫方案也是我們經常說的垂直分隔(分表)和水平分隔(分庫)。

2、正確使用聯合索引

使用了 b+ 樹的 mysql 資料庫引擎,比如 innodb 引擎,在每次查詢復合欄位時是從左往右匹配資料的,因此在建立聯合索引的時候需要注意索引建立的順序。例如,我們建立了乙個聯合索引是 idx(name,age,***),那麼當我們使用,姓名+年齡+性別、姓名+年齡、姓名等這種最左字首查詢條件時,就會觸發聯合索引進行查詢;然而如果非最左匹配的查詢條件,例如,性別+姓名這種查詢條件就不會觸發聯合索引。

慢查詢排查慢查詢通常的排查手段是先使用慢查詢日誌功能,1.查詢出比較慢的 sql 語句,2.然後再通過 explain 來查詢 sql 語句的執行計畫,最後分析並定位出問題的根源,再進行處理。

配置開啟說明(需要注意的是,在開啟慢日誌功能之後,會對 mysql 的效能造成一定的影響,因此在生產環境中要慎用此功能)我們需要配置 my.cnf 中的「slow_query_log=1」即可,並且可以通過設定「slow_query_log_file=/tmp/mysql_slow.log」來配置慢查詢日誌的儲存目錄,但這種方式配置完成之後需要重啟 mysql 伺服器才可生效。

具體查詢可以通過mysql的explain執行計畫來排查

3、附explain引數說明

以上欄位中最重要的就是 type 字段,它的所有值如下所示:

特別注意:當 type 為 all 時,則表示全表掃瞄,因此效率會比較低,此時需要檢視一下為什麼會造成此種原因,是沒有建立索引還是索引建立的有問題?以此來優化整個 mysql 執行的速度。

mysql 調優 Mysql調優

表設計 1 禁止使用外來鍵 2 多表中的相同列,必須保證列定義一致 3 國內表預設使用innodb,表字符集預設使用gbk,國際預設使用utf8的表 4 表必須包含gmt create和gmt modified欄位,即表必須包含記錄建立時間和修改時間的字段 5 單錶一到兩年內資料量超過500w或資料...

mysql卡的調優思路 MySQL效能調優思路

1.mysql效能調優思路 如果一台伺服器出現長時間負載過高 週期性負載過大,或偶爾卡住如何來處理?是週期性的變化還是偶爾問題?是伺服器整體效能的問題,還是某單條語句的問題?具體到單條語句,這條語句是在等待上花的時間,還是查詢上花的時間?1.1.監測並觀察伺服器的狀態.觀察伺服器狀態,一般用如下2個...

mysql調優經驗

訪問量越來越大,mysql自然成為瓶頸,因此最近我一直在研究 mysql 的優化,第一步自然想到的是 mysql 系統引數的優化,作為乙個訪問量很大的 日20萬人次以上 的資料庫系統,不可能指望 mysql 預設的系統引數能夠讓 mysql執行得非常順暢。通過在網路上查詢資料和自己的嘗試,我認為以下...