我想大家都知道,優化資料庫的執行效能是乙個專門的技術,oracle有這方面專門的圖書,如oracle tunning tec.本文只涉及了很少的一部分--優化sql的一些小常識。1)不知大家是否喜歡使用『not in』這樣的操作,如果是,那盡量使用(not) exists 替代
例子:
語句1 select dname, deptno from dept where deptno not in (select deptno from emp);
語句2 select dname, deptno from dept where not exists (select deptno from emp where dept.deptno = emp.deptno);
明顯的,2要比1的執行效能好很多,因為1中對emp進行了full table scan,這是很浪費時間的操作。而且1中沒有用到emp的index,因為沒有where子句。而2中的語句對emp進行的是range scan。
2)在海量查詢時盡量少用格式轉換。
如用 where a.order_no = b.order_no 而不用 where to_number (substr(a.order_no, instr(b.order_no, '.') - 1) = to_number (substr(a.order_no, instr(b.order_no, '.') - 1)
3)查詢海量資料是,可以使用optimizer hints,例如/*+ordered */
如用 select /*+ full(emp) */ e.ename from emp e where e.job = 'clerk';
而不是 select e.ename from emp e where e.job || '' = 'clerk';
Oracle 有關SQL效能優化
訪問 table 的方式 全表掃瞄 全表掃瞄就是順序地訪問表中每條記錄,oracle 採用一次讀入多個資料塊 databaseblock 的方式優化全表掃瞄 通過rowid 訪問表 rowid 包含了表中記錄的物理位置資訊,oracle 採用索引實現了資料和存放資料的物理位置 rowid 之間的聯絡...
高效能sql優化 執行計畫
一 序言 執行計畫是sql調優必不可少的一部分,如果你還是簡單的認為我們向資料庫發出一條sql語句,資料庫只是根據我們的需求解析sql語句,然後返回我們想要的結果,那你真的是太天真了,因為資料庫還會對每條通過會話發出的sql進行一系列的檢查 分析和處理,然後由優化器選擇生成護著選定出乙個成本最低的執...
oracle的SQL語句效能優化
使用oracle資料庫的應用系統,有時出現sql效能突然變差,特別是對於oltp型別系統執行頻繁的核心sql,如果出現效能問題,通常會影響整個資料庫的效能,進而影響整個系統的正常執行。這是常常遇到的問題,也是一些dba的挑戰。sql效能變差原因分析 sql的效能變差,通常是在sql語句重新進行了解析...