程式碼優化與sql優化---未完待續
阿新 • • 發佈:2020-08-07
萬丈高樓平地起,還是得打一個好地基呀
減少對變數對重複計算 //一般這麼寫 for (int i = 0; i < list.size(); i++) {...} //建議修改為: for (int i = 0, length = list.size(); i < length; i++) {...}
避免使用split(由於支援正則表示式效率比較低) String str = "a,b,c,d,,f,g"; //一般這麼寫 String[] array = str.split(","); //可以考慮使用apache的StringUtils.split(string,char) String[] array = StringUtils.split(str1, ","); //也可以考慮guava工具 List<String> list1=Splitter.on(",").splitToList(str1);
程式碼更簡潔 if (isdone) { return 0; } else { return 10; } //建議修改為 return (isdone ? 0 : 10);
map、list伴隨資料量越來越大,擴容很麻煩最好指定容量大小 //一般這麼寫 List<Integer> list = new ArrayList<>(); Map<String, String> map = new HashMap();//集合預設容量較小,超過容量自動擴容,建議根據業務量、集合擴容規則等評估大概資料量n List<Integer> list = new ArrayList<>(n); Map<String, String> map = new HashMap(n);
//一般這麼寫 public void isFinished(Status status) {MAX(id) 取最單id最大值,MAX() 全表掃描
//可能拋空指標異常 return status.equals(Status.FINISHED); } //建議修改為 public void isFinished(Status status) { returnStatus.FINISHED.equals(status); } //或 public void isFinished(Status status) { return Objects.equals(status, Status.FINISHED); }
SELECT MAX(id) from order o where o.pay_type = 23; 替代方案: select id from order where pay_type = 23 order by id desc limit 1;
當偏移量很大當時候,先查詢出9000條資料對應的主鍵id的值,然後直接通過該id的值直接查詢該id後面的資料
select * from sensor limit 9000,10; 替代方案: select * from sensor where id > (select id from sensor order by id limit 9000,1) limit 10;