MYSql 學習優化筆記

在學習MySql優化的時候的筆記:工具

經常使用優化

1: max()優化: 在相應列上添加索引
2: count()優化:count(*) 會算出包含null記錄的數量, count(field_name)只包含不含 null的數量(這也是不少時候兩種count方式結果不一致的緣由), count()的時候儘可能用後一種, count(null)返回0,即不會記錄null記錄數量
3: 子查詢優化=====》(改成)聯接查詢(若是1對多的關係,注意重複記錄)
4: group by優化 若是包含子查詢,在子查詢裏面使用where條件和group by過濾, 避免在複雜查詢的最外層使用group by(若是最外層使用會用到臨時表)
5: order by , limit 優化:學習

  • 方式1:儘可能使用主鍵或有索引的列order by;優化

  • 方式2: 使用自增型的字段: 記錄上一次返回的主鍵或者自增列(此種方式該字段不能有空值,不然會出現有的頁面數量不足的問題, 解決的方式是添加附加的index_id, 自增且索引), 過濾時先用大於上一次主鍵值且小於上一次的主鍵值+每頁的數量, 過濾該字段,而後order by 和limitcode

PS: 複合索引有效條件:排序

  • 1: where 條件中依次過濾(最左前綴)索引

  • 2:排序時: 索引字段有正有反的時候不能使用hash

  • 3:排序時: 某列有範圍查詢的時候該列右側的字段不能使用索引it

優化的思路就是儘可能避免掃描過多的記錄。後臺

建立索引的原則:

1: where, order by ,group by, on從句中的字段
2:索引字段越小越好
3:聯合索引時把離散程度高的字段放前面方法

表級優化

1: 表的範式優化
2: 適當增減一些冗餘, 作反範式優化(以空間換取時間)
3: 表的列很是多的時候使用垂直拆分
       原則:
       1: 把不經常使用的單獨字段放到一個表中
       2: 把大字段獨立存放到一個表中
       3: 把常常一塊兒用的字段放在一塊兒
4: 表的數據量很是大的時候使用水平拆分
       方法:
       1: 根據某個字段進行hash預算, 若是要拆分紅5個表, 用取餘的方式取到0-4,分表保到相應的表中
       2: 針對不一樣的hashID把數據存到不一樣的表中
       問題:
       1: 跨分區查詢的問題
       2: 統計及後臺報表操做
       (前臺使用分表查詢, 後臺使用匯總表查詢作彙總報表操做).

冗餘索引檢查工具

pt-duplicate-key-checker \
-uroot \
-p '111111' \
-h localhost

以上是學習時的筆記,若有錯誤和補充,請不吝賜教

相關文章
相關標籤/搜索