mysql數據庫的優化技術

對mysql優化時一個綜合性的技術,只要包括

 a 表的設計合理化(3NF)

 b 添加適當索引(index)[四種:普通索引 全文索引 主鍵索引 唯一索引(unique) 全文索引

 c 分表技術(水平分割 垂直分割)

 d 讀寫[寫:update/delete/add]分離

 e 存儲過程[模塊化編程,可以提高速度]

 f 對mysql配置優化[配置併發數my.ini,調整緩存大小]

 g mysql 服務器硬件升級

 h 定時的去清除不需要的數據,定時進行碎片整理(myisam)

什麼樣的表纔是符合3NF(範式)

表的範式,是首先符合1NF,才能滿足2NF,進一步滿足3NF

1NF:即表的列具有原子性,不可在分解,即列的信息不能分解,只要數據庫是關係型數據,就自動滿足1NF.

2NF:表中的記錄是唯一的,就滿足2NF,通常我們設計一個主鍵來實現.

3NF:即表中不要有冗餘數據,也就是說,表的信息如果能夠被推導出來,就不應該單獨的設計一個字段來存放.

SQL語句優化

    sql語句本身的優化

    問題是:如何從一個大項目,迅速的定位執行速度慢的語句(定位慢查詢)

          1 首先我們瞭解mysql數據庫的一些運行狀態如何查詢(比如想知道當前mysql運行的時間/一共執行了多少次 select/update/delete.../)

            show status;

            常用的:

            show status like 'uptime'

            show status like 'com_select'   show status like 'com_insert'/'com_delete'

            show [session|global] status like ... 如果你不寫[session|global] 默認是session會話,指取出當前窗口的執行,如果想看所有(從mysql啓動到現在,則應該用global)

             show status like 'connection'; //顯示慢查詢次數

             show status like 'slow_queries';

          2 如何去定位慢查詢

                   構建一個大表(400萬)`存儲過程的構建

                   默認情況下,mysql認爲10秒纔是一個慢查詢

              修改mysql的慢查詢

                   show variables like 'long_query_time';

                   set long_query_time=1;

                       

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