1. 程式人生 > >二、工作中常用的SQL優化

二、工作中常用的SQL優化

模糊匹配 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=" select
id,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 from
people where date=? "; 壞:string strSql=" select name,age from people wehre trunc(date)=? ";

6、永遠為每張表設置一個ID

數據庫的每一張表都應該設置一個ID作為主鍵,而且是int型,推薦使用UNSIGNED,並且設置上自動增加的AUTO_INCREMENT的標誌。

即使你的people表有一個主鍵叫做name的字段,你也別讓它成為主鍵,使用varchar類型作為主鍵會使得性能下降。

二、工作中常用的SQL優化