1不用在sql語句使用系統預設的保留關鍵字
2盡量用exists 和 not exists 代替 in 和 not in
這條在sql2005之後,在索引一樣,統計資訊一樣的情況下,exists ,in效果是一樣的。
以adventureworks資料庫為例,查詢在
humanresources.employeeaddress
有位址的
employee
資訊,
用in
語句如下:
setstatistics
ioon
select
*from humanresources.employee
where
employeeid in
(select employeeid from humanresources.employeeaddress ea)
setstatistics
iooff
執行後,訊息如下:
(290
行受影響)
表'employeeaddress'
。掃瞄計數
1,邏輯讀取
4 次,物理讀取
0 次,預讀
0 次,
lob
邏輯讀取
0 次,
lob
物理讀取
0 次,
lob
預讀0 次。
表'employee'
。掃瞄計數
1,邏輯讀取
9 次,物理讀取
0 次,預讀
0 次,
lob
邏輯讀取
0 次,
lob
物理讀取
0 次,
lob
預讀0 次。
執行計畫如圖
用exists ,語句如下,
setstatistics
ioon
select
*from humanresources.employee
where
exists(
select employeeid from humanresources.employeeaddress ea
where
humanresources.employee.employeeid=ea.employeeid)
setstatistics
iooff
執行後,訊息如下:
(290
行受影響)
表'employeeaddress'
。掃瞄計數
1,邏輯讀取
4 次,物理讀取
0 次,預讀
0 次,
lob
邏輯讀取
0 次,
lob
物理讀取
0 次,
lob
預讀0 次。
表'employee'
。掃瞄計數
1,邏輯讀取
9 次,物理讀取
0 次,預讀
0 次,
lob
邏輯讀取
0 次,
lob
物理讀取
0 次,
lob
預讀0 次。
執行計畫如圖:
3盡量不用select * from …..,而要寫欄位名 select field1,field2,…
這條沒什麼好說的,主要是按需查詢,不要返回不必要的列和行。
4在sql 查詢中應盡量使用索引列來加快查詢速度
5任何在order by 語句的非索引項或者有計算表示式都將降低查詢速度
6任何在where子句中使用is null 或 is not null 的語句不允許使用索引,效率較低
7萬用字元%在詞首時,系統不使用索引,當萬用字元出現在其他位置時,優化器就能利用索引
8在海量資料的sql查詢語句中盡量少用格式轉換
9任何對列的操作都將導致表掃瞄,它包括資料庫函式、計算表示式等,查詢時要盡可能將操作移至等號右邊
10 in 、or子句常會使索引失效
11通常情況下,連線比子查詢效率要高
hibernate 經驗談(一)
以前仔細研究過hibernate,現在隨著專案接觸,也慢慢的有所深入,下面將自己的一些新的體會發出來。1.盡量少用one to many的對映,如果用請把lazy設定成true,這樣在查詢主表時所有關聯的子表就不會查詢了,更不會浪費資料庫的資源。2.如果lazy true 時,如果需要 用crite...
系統設計經驗談(三)
2010 12 1 1.抽象的模組劃分圖是示意圖,在系統設計中應該有配套具體的模組關係圖對其進行解釋。2.環形呼叫關係的出現有時是不可避免的。盡量不要出現。2010 12 2 1.在複雜呼叫系統中,應該明確同步阻塞關係。2.在interpreter模式中,若需要崩潰恢復,不能使用凍結指令碼虛擬機器並...
OO分析設計經驗談
1.oo分析設計不一定用於oo語言,同樣適用於vb,php 以前版本 c等 程式設計之前最好進行oo設計,然後再進行編碼,這樣的 可讀性和易重構性要強得多.2.oo設計之前,首先應具備一定的oo概念.如果從來沒有接觸過,應好好補一下.3.uml是現在做oo設計的統一語言,應好好學習,應擁有一本 4....