索引優越性100萬&&3000萬條記錄,資料庫性能還有try-catch異常的捕捉
主要是完成任務25的在main裡面測試1000次的查詢---->
主要的的代碼就是這個
測試完成後(測試成功)
控制台裡面的列印的信息
運行成功
運行的過程中明顯的感覺就是運行的時間在邊長---->不像以前的馬上就在控制台裡面列印出最後的信息---->Junit測試運行完成
接下來就是中斷DB,看異常能否捕捉到----->
開始正常運行一次
斷開DB錯誤的密碼mybatis裡面的密碼少個6
再次運行測試
我還測試另一種把表的名字刪除一個n
運行列印的信息
測試了連個信息的錯誤的DB斷開---->可以try ---catch捕捉到異常
任務26的try--catchDB斷開可以捕捉到異常
準備檢查自己的代碼的規範是否合格----->
如果DB的表有改動------>
要保證查詢的信息保證可以查詢到
開始的模型層的欄位要改一下------>那個是和後面的查詢的欄位相對應的
還有需要修改的地方就是category.XML查詢的語句對應的SQL的具體用到欄位語句需要修改
還有需要修改的地方就是插入數據的具體修改的欄位需要修改(在測試類的裡面)
要修改的地方知識對應的欄位修改的地方---->java的代碼最好要少的修改
最多的是XML裡面的配置詳細信息修改
對於上面如果DB裡面的信息發生了改變 --->修改了也就幾分鐘可以講對應的欄位修改好----->花費的時間比較短就可以完成
接下來就是講資料庫裡面插入100萬條數據
不知道怎麼了運行了1000條就不運行了
可能是username的欄位的範圍有關
在師兄的指點下package com.java.test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class InsertTest {
public static void main(String[] args) {
Connection conn = DBUtil.getConnection();
String sql = "insert into stu_information (username,classes,birthday,city,qq,words,phone) values (?,?,?,?,?,?,?)";
try {
PreparedStatement prep = conn.prepareStatement(sql);
// 將連接的自動提交關閉,數據在傳送到資料庫的過程中相當耗時
conn.setAutoCommit(false);
long start = System.currentTimeMillis();
for (int i = 0; i < 10; i++) {
long start2 = System.currentTimeMillis();
// 一次性執行插入10萬條數據
for (int j = 0; j < 100000; j++) {
prep.setString(1, "老大"+i*j);
prep.setString(2, "java");
prep.setInt(3, 1995-02-02);
prep.setString(4, "成都");
prep.setInt(5, 18515465);
prep.setString(6, "插入100萬條記錄");
prep.setInt(7, 11598257);
// 將預處理添加到批中
prep.addBatch();
}
// 預處理批量執行
prep.executeBatch();
prep.clearBatch();
conn.commit();
long end2 = System.currentTimeMillis();
// 批量執行一次批量列印執行依次的時間
System.out.print("inner"+i+": ");
System.out.println(end2 - start2);
}
long end = System.currentTimeMillis();
System.out.print("total: ");
System.out.println(end - start);
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
http://blog.csdn.net/zhangjinpeng66/article/details/10416721(參考的文檔)
最後運行的時間的輸出
在資料庫裡面
我在cmd控制台裡面查詢了一下
我在控制台裡面查詢了一下全部的數據跑了好久
100萬次太久了我就測試沒有索引的查詢
添加了索引的速度加快
開始老大說的量級不夠----?>現在覺得100萬的查詢的時間的的數據差別也是不很大
100萬的數據量的測試完成了----->看見那個索引的優越性還是有一點不是很明顯
接下來準備3000萬的數據
這次寫進去的數據感覺時間很久運行了很久現在才10個循環---->還有90個循環
這個寫入的速度很慢---->可能太多了
終於運行完了(找了一個偏後面的數據改了一下準備測試)
開始是沒有索引的測試(這次比較明顯29s左右)
接下來建立索引的查詢測試(這個索引的作用比較直觀)
測試基本就感受到比較直觀了
今天完成的事情:前面的資料庫裡面插入100萬條記錄和3000萬條記錄,在開始100萬比較輕鬆,到3000萬的時候那個就時間比較久,後面測試的索引和沒有索引的記錄也比較直觀,查詢的效率和速度也比較直觀,還有try---catchde 異常能夠捕捉到的實現
明天的計劃:準備將自己關於任務一學習的做一個總結---->還有將項目的提交到GitHub是上面
今天遇到的困難:就是在插入數據3000萬的數據.電腦快爆炸了----->運行了一個多小時終於搞定了最後的資料庫性能測試
今天的收穫:感覺索引的強大,還有好處,還有開始數據怎麼插入到資料庫這麼大的數量
加油----->堅持
推薦閱讀:
※如果編譯器可以知道一個try塊不會拋出異常,那整個try-catch部分是不是會被忽略?
※Python 的異常機制及規範是否相當不人性化?
※如何評價王垠的《Kotlin和Checked Exception》?
※為什麼C++中,析構函數、operator delete、以及operator delete []按照慣例不會拋出異常?
※如何優雅的處理(或忽略)c++函數返回值代表的錯誤?