索引:
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.怎麼在代碼中使用存儲過程