面試回答數據庫優化問題-數據庫優化思路八點


記住以下思路,參考最有效的文章,都是博客里的網上,總結整理(個人),以備下次做優化的時候可以快速,如有更好的優化建議 希望能留言一下。

(1)、根據服務層面:配置mysql性能優化參數;

    參考這哥們—憤怒的小鳥(寫的很詳細可以參考,MySQL性能優化之參數配置)

(2)、從系統層面增強mysql的性能:優化數據表結構、字段類型、字段索引、分表,分庫、讀寫分離等等。

    表結構:數據類型選擇;字符編碼;適當拆分;適度冗余;盡量使用 NOT NULL 詳細,

    讀寫分離

(3)、從數據庫層面增強性能:優化SQL語句,合理使用字段索引。

    必看:Mysql是否需要建立索引的九大場景

    1、表的主鍵、外鍵必須有索引;
    2、數據量超過300的表應該有索引;
    3、經常與其他表進行連接的表,在連接字段上應該建立索引;
    4、經常出現在Where子句中的字段,特別是大表的字段,應該建立索引;
    5、索引應該建在選擇性高的字段上;
    6、索引應該建在小字段上,對於大的文本字段甚至超長字段,不要建索引;
    7、復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:
        a、正確選擇復合索引中的主列字段,一般是選擇性較好的字段;
        b、復合索引的幾個字段是否經常同時以AND方式出現在Where子句中?單字段查詢是否極少甚至沒有?如果是,則可以建立復合索引;否則考慮單字段索引;
        c、如果復合索引中包含的字段經常單獨出現在Where子句中,則分解為多個單字段索引;
        d、如果復合索引所包含的字段超過3個,那么仔細考慮其必要性,考慮減少復合的字段;
        e、如果既有單字段索引,又有這幾個字段上的復合索引,一般可以刪除復合索引;
     8、頻繁進行數據操作的表,不要建立太多的索引;
     9、刪除無用的索引,避免對執行計划造成負面影響;

 

    數據庫方面的技能要求,包括三個方面:
      第一,基本的增刪改查,存儲過程等技能,是否會用些group by,having,distinct,exist,in,with等高級點的語句,

      第二,有沒有設計表的經驗,

      第三,也是關鍵一點,在數據庫優化方面,MySQL性能優化的最佳21條經驗。

      索引是數據庫優化所必需的工具,一般會問以下兩方面的問題:

    ①索引有什么代價?哪些場景下你需要建索引?或者有時候反過來問,哪些場景下不推薦建索引。
          代價:時間;
          推薦:最佳21條經驗Mysql哪些地方需要建立索引
              不推薦:
                什么情況下不推薦使用索引?
                1) 數據唯一性差(一個字段的取值只有幾種時)的字段不要使用索引

                  比如性別,只有兩種可能數據。意味着索引的二叉樹級別少,多是平級。這樣的二叉樹查找無異於全表掃描。

                2) 頻繁更新的字段不要使用索引

                  比如logincount登錄次數,頻繁變化導致索引也頻繁變化,增大數據庫工作量,降低效率。

                3) 字段不在where語句出現時不要添加索引,如果where后含IS NULL /IS NOT NULL/ like ‘%輸入符%’等條件,不建議使用索引

                  只有在where語句出現,mysql才會去使用索引

                4) where 子句里對索引列使用不等於(<>),使用索引效果一般

    ②建好索引之后,怎么才能最高效地利用索引?或者反過來問,請說出一個無法有效利用已建索引的案例。
        如果條件中有or(注意:要想使用or,又想讓索引生效,只能將or條件中的每個列都加上索引),
        對於多列索引,
        like查詢是以%開頭,
        where 子句里對索引列上有數學運算,用不上索引

 

(4)、從代碼層面增強性能:使用緩存和NoSQL數據庫方式存儲,如MongoDB/Memcached/Redis來緩解高並發下數據庫查詢的壓力。

(5)、減少數據庫操作次數,盡量使用數據庫訪問驅動的批處理方法。

(6)、不常使用的數據遷移備份,避免每次都在海量數據中去檢索。

(7)、提升數據庫服務器硬件配置,或者搭建數據庫集群。

(8)、編程手段防止SQL注入:使用JDBC PreparedStatement按位插入或查詢;正則表達式過濾(非法字符串過濾);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM