1. 程式人生 > 實用技巧 >程式碼優化與sql優化---未完待續

程式碼優化與sql優化---未完待續

  萬丈高樓平地起,還是得打一個好地基呀

減少對變數對重複計算
//一般這麼寫
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) {
   //可能拋空指標異常
return status.equals(Status.FINISHED); } //建議修改為 public void isFinished(Status status) { return
Status.FINISHED.equals(status); } // public void isFinished(Status status) { return Objects.equals(status, Status.FINISHED); }
MAX(id) 取最單id最大值,MAX() 全表掃描
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;