mysql簡單調優

1.爲何要調優sql

因爲某些語句執行效率緩慢,致使沒法獲得及時響應服務器

2.簡單調優準備tcp

    打開慢查詢日誌函數

     show variables like 'slow_query_log'性能

    show variables like '%log%'(查看變量設置)優化

     set global slow_query_log_file = 'path'日誌

set global log_queries_not_using_indexes =on索引

set global long_query_time = 1(大於1秒的查詢記錄下來)隊列

explain 從句分析查詢性能(具體參數意義可自行查詢)ip

3.調優方式

     1)SQL語句優化

針對max函數能夠用索引優化,覆蓋索引

count優化 篩選條件須要增長or null(以避免出現數據不一致狀況)

子查詢優化  優化成join查詢  防止重複數據(1對多。須要增長去重關鍵字distinct)

group by優化 (默認使用臨時表,因此優化方式是不要使用臨時表還有文件表)  inner join ( a  group by a.id ) as c using(id),即創建相關索引

limit 優化 時常伴隨 order by  因此須要進行文件過濾 :使用主鍵或者索引列進行order by操做  返回上次查詢的id  而後進行id過濾、

     2)索引優化

創建合適的索引

where從句  group by從句  order by從句 on從句出現的列適合增長索引

索引的字段越小越好

離散度大的列放到聯合索引前面

索引優化sql的方法(增長索引有利於查詢,不利於寫入,避免重複索引,冗餘索引,索引變動會帶來問題,須要注意)

    3)數據表結構優化

選擇合適的數據類型

      存下數據的最小類型

       使用簡單的數據類型

        儘量的使用notnull定義字段

         儘可能少用text類型,非用不可的時候考慮分表

範式化和反範式化(第三範式)

         反範式化 : 空間換時間

         刪除異常 ,更新異常  方式:  表拆分

表結構的垂直拆分

           把原來有不少列的表拆分紅多個表

            解決了表寬度的問題

            把大字段獨立存放到一張表中

           把不經常使用字段單獨存放到表中

             把經常使用字段存放在一塊兒

表結構的水平拆分

           解決表的數據量大

            表結構相同

             數據均分方法(HASH)

             問題:跨表進行數據查詢,統計及後臺報表操做(解決方法:先後臺查詢分開)

    4)系統優化

增長tcp支持隊列數

net.ipv4.tcp_max_syn_backlog=65535

減小斷開鏈接時,資源回收

net.ipv4.tcp_max_tw_buckets=8000

net.ipv4.tcp_tw_reuse=1

net.ipv4.tcp_tw_recycle=1

net.ipv4.tcp_fin_timeout=10

打開文件數限制

關閉防火牆

(硬件防火牆)

   5)服務器硬件優化

相關文章
相關標籤/搜索