1. 程式人生 > >【MySql】Sql優化(二)——影響效能的因素

【MySql】Sql優化(二)——影響效能的因素

一、前言 在上一篇部落格中,小編向大家簡單介紹了一下Mysql執行的流程:客戶端傳送一條查詢給資料庫伺服器,伺服器先進行許可權檢測,然後在快取中查詢,如果命中了快取,就立即返回儲存在快取中的結果,如果沒有,就再經過解析器解析,前處理器進行預處理,優化器優化,得到Mysql認為最優的執行計劃,然後再在查詢執行引擎中進行查詢,把查詢結果返回給使用者。

SQL執行的最大瓶頸在於磁碟的IO,即資料的讀取;不同SQL的寫法,會造成不同的執行計劃的執行,而不同的執行計劃在IO的上面臨完全不一樣的數量級,從而造成效能的差距;

其中重要的就是查詢優化器。可以說,如果優化器得到的結果是程式設計師認為的最優查詢結果,那就最優的查詢。在這篇部落格中,小編就向大家介紹一下那些因素會影響sql效能。

二、影響因素 在這裡插入圖片描述

2.1 需求影響 相比開發人員都有體會吧,當實現一個需求的時候,需要在資料庫中進行連表查詢,有的時候表關係不滿足連線。

2.2 系統架構的影響

2.2.1 那些不應該放在資料庫中的資料、

  • 二進位制資料

  • 流水佇列資料

  • 超大文字

2.2.2 快取的使用

  • 系統配置資訊

  • 活躍的使用者的基本資訊

  • 活躍使用者的定製化資訊

  • 基於時間段的統計資料

  • 讀>>>寫的資料

2.2.3 其他 1、Cache 系統的不合理利用導致Cache 命中率低下造成資料庫訪問量的增加,同時也浪費了Cache系統的硬體資源投入;

2、過度依賴面向物件思想,對系統可擴充套件性的過渡追求,促使系統設計的時候將物件拆得過於離散,造成系統中大量的複雜Join語句,而MySQL Server 在各資料庫系統中的主要優勢在於處理簡單邏輯的查詢,這與其鎖定的機制也有較大關係;

3、對資料庫的過渡依賴,將大量更適合存放於檔案系統中的資料存入了資料庫中,造成資料庫資源的浪費,影響到系統的整體效能,如各種日誌資訊;

4、過度理想化系統的使用者體驗,使大量非核心業務消耗過多的資源,如大量不需要實時更新的資料做了實時統計計算。

2.3 資料庫設計問題 1,冗餘資料的處理; 2,大表拆小表,有大資料的列單獨拆成小表; 3,根據需求的展示設定更合理的表結構; 4,把常用屬性分離成小表;

2.4 硬體影響 1,提高IO指標 IOPS:每秒可提供的IO 訪問次數; IO 吞吐量:每秒的IO 總流量; 2,提高CPU計算能力; 3,如果是單獨的資料庫伺服器,提高網路能力;

三、綜上 影響sql的效能有很多的,綜合考慮,需求和架構及業務實現優化:55%, Query 語句的優化:30%,資料庫自身的優化:15%

所以我們要對症下藥,在下一篇部落格中,小編就向大家介紹如何進行Sql優化。