- Mar 06 Tue 2012 23:03
點選 "我的文件" 圖示, 卻無法開啟其資料夾 - 解決方法
- Jun 05 Sun 2011 13:36
WinXP - 刪除檔案時, 檔案總管(explorer.exe)沒有回應
刪除一個檔案時, 會刪很久, 都沒有回應,
甚至整個電腦都沒有回應,還要重開機..
有時候會趁還稍微有點回應時, 呼叫出工作管理員, 強制把 explorer.exe 關閉
並重新啟動...狀況才恢復正常...
一直覺得很麻煩, 又不想重灌電腦...
- May 20 Fri 2011 08:59
Excel VBA 連線 Oracle - Select 與 Insert 範例
- Jan 20 Thu 2011 16:18
Oracle - 基本的Sql編寫注意事項
以下文章轉載來自 oracle園地
另外聽說
IN 適合內外表都很大的情況,EXISTS 適合外表結果集很小的情況。
基本的Sql編寫注意事項
- 儘量少用 IN 操作符,基本上所有的IN操作符都可以用EXISTS代替。
- 不用NOT IN操作符,可以用NOT EXISTS或者外連接+替代。
- Oracle 在執行IN子查詢時,首先執行子查詢,將查詢結果放入臨時表再執行主查詢。而EXISTS則是首先檢查主查詢,然後運行子查詢直到找到第一個匹配項。( Robert : 所以有EXISTS 快於 IN 之說 )
- NOT EXISTS比NOT IN效率稍高。但具體在選擇IN或EXIST操作時,要根據主子表資料量大小來具體考慮。
- 不用「<>」或者「!=」操作符。對不等於操作符的處理會造成全表掃瞄,可以用「<」 or 「>」代替。
- Where子句中出現IS NULL或者IS NOT NULL時,Oracle會停止使用索引而執行全表掃瞄。可以考慮在設計表時,對索引列設置為NOT NULL。這樣就可以用其他操作來取代判斷NULL的操作。
- 當通配符「%」或者「_」作為查詢字符串的第一個字符時,索引不會被使用。
- 對於有連接的列「||」,最後一個連接列索引會無效。儘量避免連接,可以分開連接或者使用不作用在列上的函數替代。
- 如果索引不是基於函數的,那麼當在Where子句中對索引列使用函數時,索引不再起作用。
- Where 子句中避免在索引列上使用計算,否則將導致索引失效而進行全表掃瞄。
- 對資料類型不同的列進行比較時,會使索引失效。
- 用「>=」替代「>」。
- UNION 操作符會對結果進行篩選,消除重複,資料量大的情況下可能會引起磁盤排序。如果不需要刪除重複記錄,應該使用UNION ALL。
- Oracle 從下到上處理 Where 子句中多個查詢條件,所以表連接語句應寫在其他Where條件前,可以過濾掉最大數量記錄的條件必須寫在Where子句的末尾。
- Oracle從右到左處理From子句中的表名,所以在From子句中包含多個表的情況下,將記錄最少的表放在最後。(只在採用RBO優化時有效,下文詳述)
- Order By語句中的非索引列會降低性能,可以通過添加索引的方式處理。嚴格控制在Order By語句中使用表達式。
- 不同區域出現的相同的Sql語句,要保證查詢字符完全相同,以利用SGA共享池,防止相同的Sql語句被多次分析。
- 多利用內部函數提高Sql效率。
- 當在Sql語句中連接多個表時,使用表的別名,並將之作為每列的前置碼。這樣可以減少解析時間。
需要注意的是,隨著Oracle的昇級,查詢優化器會自動對Sql語句進行優化,某些限制可能在新版本的Oracle下不再是問題。尤其是採用CBO(Cost-Based Optimization,基於代價的優化方式)時。
- Jan 07 Fri 2011 10:37
靈格斯 Lingoes 去彈窗廣告方法
其他興趣 (3)