目前分類:Oracle & Unix (23)
- 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,基於代價的優化方式)時。
- Dec 16 Thu 2010 15:10
Oracle - Merge into 的使用實例
- May 11 Tue 2010 13:07
SQLPLUS 使用法
- May 03 Mon 2010 11:27
Oracle - 關於 DBMS_JOB
今天遇到一個情況,某一台主機的時間早了20分鐘,
由於想實做 Database Link , 所以想把兩台主機的時間調近一點,
由於這台主機是HP的,改了時間之後,卻發現 date 的語法有些不同,
而系統上用的時區竟然不是台灣的時區 GMT+8 ,改了之後發現,時間快了8小時,
- Apr 21 Wed 2010 17:17
Oracle - Database Link 實做紀錄
以下為實作過程
Step1:
首先,確認 伺服器的參數 global_names = False
( 假設由 Server A 連至 Server B ,下圖為 Server A 的情況,重設後需重新啟動資料庫 )
- Apr 21 Wed 2010 14:31
Oracle 系統效能低落,真正的瓶頸在哪裡?
From 網路文章
本文引用自lcjan - Oracle系統效能低落,真正的瓶頸在哪裡?
在多次處理資料庫效能瓶頸的經驗中,有幾點是重要的方向:主機、Storage、作業系統、網路、資料庫、應用程式,有些是因,有些是果,當整體系 統效能不彰時,系統工程師可能會去監看主機磁碟、網路、記憶體的使用,可能會得到一個方向是指向資料庫,接著DBA去監看資料庫,從記憶體、效能、連線等 資訊的蒐集分析,又可能指向主機記憶體或不足導致SWAP,這樣的結論,看起來是買個記憶體來插上去就行了吧!當然不是,這些都可能是某些原因產生的結 果。
- Nov 11 Wed 2009 15:22
靈光一閃 之 IBM AIX: 0511-083 & Segmentation fault(coredump) 解決法
- Oct 07 Wed 2009 08:52
IBM-AIX: Smitty vg Error: 0512-005 & 0512-038
利用 smitty vg 來備份 Datavg 時, 總是遇到下列錯誤...
0512-005 savevg : Backup Completed .........with errors
0512-038 savevg : Backup Completed .........with errors
- Sep 04 Fri 2009 13:58
Oracle - EXISTS 取代 IN 可加快查詢的速度
- Sep 04 Fri 2009 13:29
Oracle - Where 中可比對 SubQuery 回傳的多欄位
- Jun 17 Wed 2009 11:15
Oracle - TO_CHAR 數字格式化
使用 TO_CHAR 函数 可以將字格式化
SELECT TO_CHAR(12345678,'999,999,999') , TO_CHAR(12345678,'FM999,999,999') FROM DUAL
- Jun 01 Mon 2009 13:34
Oracle - imp 指定的 Table
imp test/test file=IEPCS_0601.dmp log=IMP0601.log fromuser=iepcs touser=iepcs tables=TB_126 ignore=y
可參考
http://blog.xuite.net/jackal/blog/17951856
- May 27 Wed 2009 17:14
Oracle - VARCHAR, VARCHAR2 and CHAR data types 的差異
好清楚的觀念喔,我終於搞懂了
From 網路文章
http://www.orafaq.com/faq/what_is_the_difference_between_varchar_varchar2_and_char_data_types
What is the difference between VARCHAR, VARCHAR2 and CHAR data types?
- May 27 Wed 2009 17:00
Oracle - 如何在 SELECT statement 中,實作 IF-THEN-ELSE 邏輯 ?
發現了一些新的用法 & Function
From 網路文章
http://www.orafaq.com/faq/how_does_one_implement_if_then_else_logic_in_a_select_statement
How does one implement IF-THEN-ELSE logic in a SELECT statement?
Submitted by admin on Sat, 2005-11-12 06:38
- May 27 Wed 2009 15:45
Oracle - TRUNCATE, DELETE and DROP commands 的差異
最近剛好碰到這些問題,在網路上找到這個比較的差異,順道紀錄一下。
http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands
- May 25 Mon 2009 17:04
Oracle - Delete Table & Truncate Table 時遇到的錯誤訊息
結論是
在沒有將Constrains 給 Disable 前,不能直接Delete 或將 Drop TABLE
這樣將會違反了oracle 的 Data 完整性。
以下為Robert 要將一個巨大的 Table ,刪去大部分的資料再重建,順便釋放 TableSpace
( K 國人程式寫不好 , 一天竟然有 13.5 萬筆資料寫入, 而且成長快速 , 目的與實作的結果差很遠)
- Apr 02 Thu 2009 14:54
Unix 筆記 - Tar 的用法
From 網路文章 http://tw.knowledge.yahoo.com/question/question?qid=1508112100544
tar 是Unix 上的檔案與目錄備份指令, 與它類似的指令是 cpio.
tar 的全名叫做 tape archive, 就是要把資料備份到tape. 但是, 不一定要備份到 tape, 也可以備份到檔案, 也可以備份到另一台主機.
tar 指令有一些限制, 使用時要小心.
- Apr 01 Wed 2009 17:25
Unix 筆記 - Error Report
# errpt
IDENTIFIER TIMESTAMP T C RESOURCE_NAME DESCRIPTION
B617E928 0113043809 T H rmt0 TAPE OPERATION ERROR --表 磁帶機錯誤 2009/01/13 04:38
#
- Apr 01 Wed 2009 17:17
Unix 筆記 - set -o vi