1. 程式人生 > >java面試——資料庫優化方面

java面試——資料庫優化方面

一、定位:查詢、定位慢查詢

1、查詢並定位慢查詢

在專案自驗轉測試之前,在啟動mysql時開啟慢查詢,並且把執行慢的語句寫到日誌中,在執行一定的時間後,查詢日誌。通過檢視日誌,找到慢查詢語句。使用explain,來詳細分析語句的問題。

二、優化手段

1、使用索引

建立合適的索引,就可以在索引中查詢,查詢到以後直接找相對應的記錄

①索引是什麼 ——  一種幫助DBMS高效獲取資料的資料結構

②分類

普通索引:允許重複值出現

唯一索引:不能有重複的記錄,其它與普通索引相同

主鍵索引:隨著設定主鍵而建立的,唯一且沒有null值

全文索引:對錶中文字域進行索引,只在myisam中有效

缺點:

①、佔用磁碟空間

②、使dml(插刪改)變慢

因此如果不查詢的欄位,建立索引就無意義,不是隻有幾個值的欄位,變化不頻繁的欄位,也不使用索引。

2、分表

當一張表的資料比較多,或者一些表的欄位的值比較多,我們就可以水平分表,或者垂直分表來優化。

①、水平分表 

根據經驗,當Mysql資料到達百萬級別,查詢效率會很低,容易造成表鎖,堆積連線,直到掛掉,因此水平分表能減少壓力。

(1)、按時間分表--時效性較強

(2)、按區間分表

(3)、hash分表

②、垂直分表

很少情況下會查詢,欄位值又多,就把多的欄位通過外來鍵關聯,單獨分到一個表中。

3、讀寫分離

一臺伺服器不能滿足要求,採用讀寫分離的方式進行叢集。

一臺資料庫支援的最大併發連線數是有限的,如果使用者併發訪問太多,一臺伺服器滿足不了要求時,就可以叢集處理。其中讀寫分離是最常用的叢集技術。

①、確保主從要同步

確保不同資料庫伺服器的資料是一致的。 能改變資料庫的操作都往主資料庫去寫。其它的資料庫從主資料庫上同步資料。

②、使用負載均衡

使用負載均衡來實現寫的操作都往主資料庫去,而讀的操作都往從資料庫。

4、使用快取技術

在持久層,和資料庫之間新增一個快取層。 使用者訪問時,可以直接從快取中獲取。

①、memcached 不支援分散式快取

②、使用redis來做中央快取

5、SQL語句優化

①、批量插入資料,先去除鍵,操作完成後,再恢復。

②、關閉唯一效驗

③、修改事務的提交方式

④、變多次提交為一次

⑤、Order by多使用索引排序

⑥、確保on上面的欄位有索引

⑦、明確寫出要查詢的列,儘量不使用*

⑧、儘量不要在where裡面使用不等號或者null值判斷,或者使用like,會導致全表掃描

⑨、可使用exist代替in

三、選擇合適的儲存引擎

1、MyISAM儲存引擎 

對事務要求不高,同時以查詢和新增為主,查詢新增

2、INNODB

對事務要求高,儲存的都是重要資料

3、Memory

資料變換頻繁,不需入庫,速度極快,查詢修改

不同儲存引擎的特點: