mysql(一)性能優化

  1. 在配置文件裏打開慢查詢
    linux環境下的配置文件位於/etc/my.cnf
    windows環境下的配置文件位於 my.ini
    配置 slow_query_log = 1 開啓慢查詢日誌
    slow_query_log_file= 慢查詢日誌存放地址
    long_query_time=10 慢查詢標準

  2. 慢查詢分析工具
    mysql自帶的分析工具mysqlfumpslow,需要安裝perl環境運行
    這個工具可以對日誌進行(時間,次數等)排序
    mysql和mysqld是有區別的:
    mysql.exe指的是mysql的客戶端,比如登錄等。
    mysqld 指mysql的服務端,開啓mysql服務。
    3.慢查詢優化方法

    1. 硬件的優化(硬盤,內存,cpu等)
    2. 服務器優化(linux服務器比mysql服務器穩定)
    3. sql語句進行優化
    4. 反範式化設計(三大範式)

    參考《阿里java開發手冊》,適當冗餘,以空間換時間

    1. 索引優化

    mysql索引顯式支持b-tree,實際上也支持hash,只是看起來顯示的是b-tree,技術上實際上使用的是b+樹

  3. 三大範式

    1. 字段不可拆分
    2. 完全依賴
    3. 消除傳遞依賴
  4. 索引

    索引(Index)是幫助MySQL高效獲取數據的數據結構。
    mysql索引包含 普通索引 、唯一索引、符合索引

    主鍵索引不需要單獨創建,主鍵索引跟唯一索引的區別就是:
    主鍵索引不能爲空,唯一索引可以爲null

    執行計劃 EXPLAIN(執行計劃詳細的知識參考ppt)
    查詢結果中的key字段表示用到的索引,爲null表示沒用到索引
    sql是否充分用到了索引,看ken_len字段(百度ken_len的算法)

  5. 索引查詢的策略
    全值匹配我最愛,最左前綴要遵守;

    儘量全值匹配,最佳左前綴法則

    帶頭大哥不能死,中間兄弟不能斷;

    最佳左前綴法則,(查詢從索引的最左前列開始並且不跳過索引中的列)

    索引列上少計算,範圍之後全失效;

    不在索引列上做任何操作,範圍條件放最後

    LIKE百分寫最右,覆蓋索引不寫*;

    like左側寫%不能使用索引,儘量使用覆蓋索引(只訪問索引的查詢(索引列和查詢列一致)),減少select *

    不等空值還有OR,索引影響要注意;

    OR改UNION效率高

    VARCHAR引號不可丟, SQL優化有訣竅。

  6. 覆蓋索引,要查詢的列全部都是索引列,只用查索引目錄就能找到數據,這種查詢叫做覆蓋索引

  7. type system>const>eq_rel>rel>range>index>all

  8. 分頁也是一種重要的優化方式

  9. 進階(mycat 分庫分表,讀寫分離,性能瓶頸,b+樹,索引失效)

如何寫一手好sql

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章