程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> oracle性能優化操作一:避免對列的操作

oracle性能優化操作一:避免對列的操作

編輯:Oracle教程

oracle性能優化操作一:避免對列的操作


任何對列的操作都可能導致全表掃描,這裡所謂的操作包括數據庫函數、計算表達式等等,查詢時要盡可能將操作移至等式的右邊,
甚至去掉函數。

例1:下列SQL條件語句中的列都建有恰當的索引,但30萬行數據情況下執行速度卻非常慢:

select * from record where  substrb(CardNo,1,4)='5378'(13秒)  

select * from record where  amount/30< 1000(11秒)  

select * from record where  to_char(ActionTime,'yyyymmdd')='19991201'(10秒)  

由於where子句中對列的任何操作結果都是在SQL運行時逐行計算得到的,因此它不得不進行表掃描,而沒有使用該列上面的索引;
如果這些結果在查詢編譯時就能得到,那麼就可以被SQL優化器優化,使用索引,避免表掃描,因此將SQL重寫如下:

select * from record where CardNo like  '5378%'(< 1秒)

select * from record where amount  < 1000*30(< 1秒)

select * from record where ActionTime= to_date ('19991201' ,'yyyymmdd')(< 1秒)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved