8個MySQL性能優化技巧

jopen 11年前發布 | 13K 次閱讀 MySQL 數據庫服務器

完成了你的品牌新的應用程序,一切工作就像一個魅力。用戶使用你的網絡每個是幸福的。

然后,突然一個大爆發的用戶殺死你的MySQL服務器網站已關閉出了什么問題你怎么能阻止它

以下是MySQL性能優化一些技巧,幫助你,幫助你的數據庫

大處著眼

在早期的發展階段,你應該知道預期到您的應用程序的用戶數。如果你希望很多用戶來說,你應該想想大,從一開始,計劃進行復制,可擴展性和性能。

但是,如果你優化你的SQL代碼,架構和索引策略,也許你不會需要大環境。你必須總是三思而后行的性能和可擴展性是不一樣的。

請務必使用EXPLAIN

EXPLAIN語句可以被用來作為獲取信息的方式MySQL如何執行SELECT語句的代名詞DESCRIBE。

當你前面一個關鍵字EXPLAIN SELECT語句,MySQL的顯示信息的查詢執行計劃的優化。也就是說,MySQL的說明它將如何處理SELECT,包括信息表加入的順序。可以使用EXPLAIN擴展的提供額外的信息。

選擇正確的數據類型

通常存儲在磁盤上(除了一些數據庫,內存數據庫一樣,它是存儲在內存中)。這意味著,為了獲取信息,為您的數據庫,它必須從磁盤讀取該信息,并把它變成一個結果集,您可以使用。磁盤I / O是極其緩慢的,尤其是在比較其他形式的數據存儲。

當你的數據庫的增長要大,開始讀取時間要長。設計拙劣的數據庫處理這個問題比他們實際需要的磁盤上分配更多的空間。這意味著該數據庫占用空間的磁盤的使用效率低下。

選擇正確的數據類型,可以幫助確保我們存儲的數據,使數據庫盡可能的小。為此,我們只選擇我們所需要的數據類型。

使用持久連接

使用永久連接的原因是減少數量的連接是相當昂貴的,即使他們更快的與MySQL與大多數其他數據庫。

有一些爭論這個話題,在網絡上mysqli擴展已禁用持久性連接功能,所以我會寫更多關于這個主題。持久連接的唯一的缺點是,如果你有多個并發連接,可以達到max_connections設置。這是很容易改變Apache的設置,所以我不認為這是原因為什么你不應該使用持久連接。

持久連接是特別有用的,如果你有另一臺計算機上的數據庫服務器。由于上述缺點,明智地使用它們。

了解查詢緩存

查詢緩存存儲的SELECT語句的文本,連同相應的結果發送到客戶端。如果相同的語句被接收后,服務器從查詢緩存中,而不是分析和再次執行該語句檢索結果。查詢緩存是共享的會話之間,這樣的結果集所產生的一個客戶端可以發送另一個客戶端發出的相同的查詢。

查詢緩存的環境中,可能是有用的,你有表不經常改變,服務器接收到許多相同的查詢。對于許多Web服務器產生許多動態頁面的基于數據庫的內容,這是一個典型的情況。

查詢緩存不返回過時的數據。在查詢緩存表被修改時,任何相關的條目將被刷新。

你怎么找到我的MySQL查詢緩存是工作或沒有?
MySQL提供的統計資料,只需鍵入下面的命令在mysql>提示符下:

  1. mysql> show variables like 'query%';  
  2. </ol> </div>


    不要使用索引列功能

    列上索引可以是偉大的性能增益,如果你使用該列中的函數指數是從來沒有使用過

    總是嘗試重寫查詢不使用索引列的功能

    1. WHERE TO_DAYS(CURRENT_DATE) - TO_DAYS(event_date) <= 7  
    2. </ol> </div>


      可能是

      1. WHERE event_date >= '2011/03/15' - INTERVAL 7 DAYS  
      2. </ol> </div>


        今天的日期PHP生成這樣一來,指數EVENT_DATE查詢緩存可存儲和查詢

        了解禪宗的SQL編碼

        SQL代碼優化數據庫性能的基礎SQL編碼技術,如重寫子查詢的SQL語句使用連接,消除了連接和類似游標

        通過編寫巨大SQL代碼數據庫的性能將是巨大的

        使用ON DUPLICATE KEY UPDATE

        如果你指定ON DUPLICATE KEY UPDATE將某行插入,會導致一個UNIQUE索引或PRIMARY KEY重復的值更新舊行

        1. INSERT INTO wordcount (word, countVALUES ('a_word',1) ON DUPLICATE KEY UPDATE count=count+1;  
        2. </ol> </div>
          保存訪問服務器然后選擇更新),清理你的代碼刪除所有如果record_exists插入其他更新

         本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
         轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
         本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!