二、工作中常用的SQL優化
阿新 • • 發佈:2018-03-15
模糊匹配 sql語句 子集 優化 span 比較 數據庫 傳輸 sql優化
除了給table建立索引之外,保持良好的SQL語句編寫。
1、通過變量的方式來設置參數
比如動態查詢的時候,盡量這樣寫
好:string strSql=" SELECT * FROM PEOPLE P WHERE P.ID=? ";
壞:string strSql=" SELECT * FROMM PEOPLE P WHERE P.ID= "+ID;
數據庫的SQL解析和執行會保存在緩存中,SQL只要有變化,就要重新解析。而"where p.id="+id的方式在id值發生改變得時候需要重新解析SQL,浪費時間。
2、盡量不要使用select *
好:string strSql=" selectid,name from people ";
壞:string strSql=" slect I from people";
select * 會增加SQL解析的時間,而且把不需要的數據也查詢了出來,數據傳輸很浪費時間。
3、謹慎使用模糊查詢
好:string strSql=" select * from people p where p.id like ‘parm%‘ ";
壞:string strSql=" select * from people p where p.id like ‘%parm%‘ ";
當模糊匹配以%開頭,這一列的索引將徹底失效,導致全表掃描,如果不以%開頭,則這一列的索引還是有效的。
4、優先使用UNION ALL,避免使用UNION
好:string strSql=" select name from people union all select name from teacher "; 壞:string strSql=" select name from people union select name from teacher ";
因為UNION會將各查詢的子集記錄進行比較,比起來UNION ALL,速度會慢很多。
5、在where語句或者order by語句中,避免對索引字段進行計算操作。
好:string strSql=" select name ,age frompeople where date=? "; 壞:string strSql=" select name,age from people wehre trunc(date)=? ";
6、永遠為每張表設置一個ID
數據庫的每一張表都應該設置一個ID作為主鍵,而且是int型,推薦使用UNSIGNED,並且設置上自動增加的AUTO_INCREMENT的標誌。
即使你的people表有一個主鍵叫做name的字段,你也別讓它成為主鍵,使用varchar類型作為主鍵會使得性能下降。
二、工作中常用的SQL優化