數據庫優化

索引:

    1.如何建立索引

        CREATE UNIQUE INDEX 索引名稱 ON 表名稱 (列名稱)

    2.爲什麼索引可以優化查詢

        索引的功能主要就是根據建立了索引的那列,對數據進行規則化排列,等下次按照索引條件查詢時,可以按照索引類型快速定位數據,不需要像沒建立索引時,全表掃描。

        索引的規則與索引引擎有關,mysql支持多個索引引擎,如BTree索引,哈希索引,全文索引等。

    3.什麼情況下索引會失效

        ①sql中有or鏈接兩個字段條件,即使其中一個字段建立了索引,也不會生效,需要or鏈接所有的字段都有索引才行

        ②sql中有like關鍵字查詢 "%XX" 類似條件,即模糊查詢 % 開頭不會走索引(Tree結構)

        ③如果查詢列對象數據類型爲字符串,一定要以 "數據" 類型查詢

        ④sql中使用了函數,不會走索引 

        ⑤not in / not exist的查詢

    4.索引弊端 

        在對建立了索引的表進行增刪改時,將對其建立的索引也進行操作,增加了工作量也導致處理時間更長。索引也需要佔用磁盤空間。

    5.多列/複合索引

        即爲表-table_1的a、b、c三個字段建立索引,索引中存儲數據按照abc的順序排列,那麼當你查詢a、ab、abc的時候,可以使索引命中,如果有人說ac的查詢組合也可以命中索引,那麼命中的效果是與a的單列索引是一樣的,並非命中了ac的組合索引。


數據庫集羣:

    1.爲什麼要做集羣

        集羣可以將同一個數據庫服務分散到多個服務器上面去,減輕單個服務器訪問和處理壓力。

        數據庫服務器集羣之後,可將對數據庫的讀寫分離,即數據庫的寫操作固定分散到一部分服務器上,對數據庫的讀操作固定分散到另外的服務器上面。通過主從同步,實現集羣服務器之間的數據同步。


集羣-讀寫分離:

    讀寫分離模式圖:來自https://blog.csdn.net/zhangzijiejiayou/article/details/50674769

                    

  1.爲什麼讀寫分離能提高應用性能

        ①物理服務器增加,總可用資源增加

        ②讀寫分離,緩解事務導致的數據庫鎖競爭情況

        ③讀寫分離適合讀操作多,寫操作少的情況,因爲頻繁的寫入操作會導致數據庫集羣間的頻繁同步,反而拖慢數據庫效率。

        ④注意數據庫的集羣及分佈式是不同的,集羣關係中,多臺服務器的數據相同,數據發生修改,必須同步。分佈式系統中,可以將完整數據庫分散存儲,各司其職。


  2.除了讀寫分離,還有什麼能提高服務器性能

        ①加索引,查詢儘量落在索引字段上

        ②分佈式緩存(redis、mongodb)配置數據庫使用,熱門數據存儲在緩存中讀取更快。Mybatis等框架提供了內存中的二級緩存,可能不符合集羣系統的架構思想,需要謹慎使用。

        

存儲過程:

    1.什麼是存儲過程

            可以看作是數據庫提供的方法,在調用時,只以方法/存儲過程名和參數代替一般sql即可發揮作用

    2.存儲過程有什麼好處

            減少了網絡開銷,原本要傳遞一大串sql到數據庫,現在只需要一個存儲名和對應參數

            減少了對sql編譯的過程。類似於java的熱點代碼,數據庫會對存儲過程進行預編譯,使之可以直接被執行。

    3.怎麼新建存儲過程

    4.怎麼在代碼中使用存儲過程

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