oracle只有當where子句中所有條件都使用"=:"才認為是使用繫結變數麼?
oracle只有當where子句中所有條件都使用"=:"才認為是使用繫結變數麼?
select col1,col2,col3,col4,col5
from tab1
where col1='1'
and col2 in ('000','001','003','004','005')
and col3 =:v1
/
在使用v$sqlarea中類似上面的語句出現了1萬多次,應該能確認這樣的語句是沒有很好使用繫結變數吧。
我的疑問:
1.如果條件一和條件二的內容就是這樣固定的,沒有變化,只是第三個條件使用了"=:"形式,是不是oracle認為這樣的SQL不能算是使用繫結變數,不會在shared pool中進行快取?
2.是不是在where子句中每個條件都要是"=:"形式才可以?感覺oracle有點傻的說。
3.好多SQL語句都是透過眾多服務拼湊出來的,可能不全是"=:"形式,那豈不是都修改?大家有遇到這樣類似的問題麼。
4.大家在處理這些沒有很好使用繫結變數問題的時候都有哪些可行的方案呢。
5.例如就是是上面的結構,怎麼寫才能讓oracle認為這個要被反覆的使用,在shared pool中多停留呢。
6.對於or和in的條件子句應該如何調整呢。
關於繫結變數的理解還有待提高,還請朋友們多多幫助。
===============================================================
在各位老大的提示下,我終於明白我所提的問題描述和理解上有問題。
我使用的查詢語句是:
select substb(sql_text,1,120),count(1)
from v$sqlarea
group by substb(sql_text,1,120)
having count(1)>400
order by count(1) desc
/
然後使用的v$sqltext_with_newlines查詢到其中一個hash對應的SQL。
實際上對應的SQL有很多,我所寫的結構只是其中的一個,在我全部列選所有SQL語句後,其後面的結構是不一樣的,都是太長的SQL語句擾亂了我的思維(其實是水平有待提高)。在我把 substb(sql_text,1,120) 放大到 substb(sql_text,1,450) 後發現了一個問題,在450之後有好多like ***%'(***代表不同的值)結構的條件,所以SQL的樣子不相同,當然hash_value都不一樣了
類似結構是:
select col1,col2,col3,col4,col5
from tab1
where col1='1'
and col2 in ('000','001','003','004','005')
and col3 =:v1
and col4 like '***%' ------------沒有取出全部的SQL內容
/
問題提的不正確,請大家原諒,
目前發現了這些SQL語句的問題,應該將那些like後面的條件讓應用人員進行調整。
但是還有一個問題:
如果結構就是
select col1,col2,col3,col4,col5
from tab1
where
col1='1'
and col2 in ('000','001','003','004','005')
and col3 =:v1
/
其中的條件
col1='1'
and col2 in ('000','001','003','004','005')
是固定不變的,沒有寫成"=:"的形式,在v$sqlarea中是不是應該只是出現一次,在這種情況下,這樣的語句會被重用麼?
換一種說法:是不是在v$sqlarea上取到的次數為1的那些SQL均會被ORACLE重用?
(個人認為是可以的)
有專門介紹ORACLE處理繫結變數機制方面的資料麼。這方面還真需要好好學習學習。
[ 本帖最後由 secooler 於 2007-12-13 17:44 編輯 ]
select col1,col2,col3,col4,col5
from tab1
where col1='1'
and col2 in ('000','001','003','004','005')
and col3 =:v1
/
在使用v$sqlarea中類似上面的語句出現了1萬多次,應該能確認這樣的語句是沒有很好使用繫結變數吧。
我的疑問:
1.如果條件一和條件二的內容就是這樣固定的,沒有變化,只是第三個條件使用了"=:"形式,是不是oracle認為這樣的SQL不能算是使用繫結變數,不會在shared pool中進行快取?
2.是不是在where子句中每個條件都要是"=:"形式才可以?感覺oracle有點傻的說。
3.好多SQL語句都是透過眾多服務拼湊出來的,可能不全是"=:"形式,那豈不是都修改?大家有遇到這樣類似的問題麼。
4.大家在處理這些沒有很好使用繫結變數問題的時候都有哪些可行的方案呢。
5.例如就是是上面的結構,怎麼寫才能讓oracle認為這個要被反覆的使用,在shared pool中多停留呢。
6.對於or和in的條件子句應該如何調整呢。
關於繫結變數的理解還有待提高,還請朋友們多多幫助。
===============================================================
在各位老大的提示下,我終於明白我所提的問題描述和理解上有問題。
我使用的查詢語句是:
select substb(sql_text,1,120),count(1)
from v$sqlarea
group by substb(sql_text,1,120)
having count(1)>400
order by count(1) desc
/
然後使用的v$sqltext_with_newlines查詢到其中一個hash對應的SQL。
實際上對應的SQL有很多,我所寫的結構只是其中的一個,在我全部列選所有SQL語句後,其後面的結構是不一樣的,都是太長的SQL語句擾亂了我的思維(其實是水平有待提高)。在我把 substb(sql_text,1,120) 放大到 substb(sql_text,1,450) 後發現了一個問題,在450之後有好多like ***%'(***代表不同的值)結構的條件,所以SQL的樣子不相同,當然hash_value都不一樣了
類似結構是:
select col1,col2,col3,col4,col5
from tab1
where col1='1'
and col2 in ('000','001','003','004','005')
and col3 =:v1
and col4 like '***%' ------------沒有取出全部的SQL內容
/
問題提的不正確,請大家原諒,
目前發現了這些SQL語句的問題,應該將那些like後面的條件讓應用人員進行調整。
但是還有一個問題:
如果結構就是
select col1,col2,col3,col4,col5
from tab1
where
col1='1'
and col2 in ('000','001','003','004','005')
and col3 =:v1
/
其中的條件
col1='1'
and col2 in ('000','001','003','004','005')
是固定不變的,沒有寫成"=:"的形式,在v$sqlarea中是不是應該只是出現一次,在這種情況下,這樣的語句會被重用麼?
換一種說法:是不是在v$sqlarea上取到的次數為1的那些SQL均會被ORACLE重用?
(個人認為是可以的)
有專門介紹ORACLE處理繫結變數機制方面的資料麼。這方面還真需要好好學習學習。
[ 本帖最後由 secooler 於 2007-12-13 17:44 編輯 ]
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-555639/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle中where子句中條件的物理執行順序Oracle
- 在oracle的plsql中為cursor使用繫結變數OracleSQL變數
- oracle 繫結變數在動態條件統計中的應用Oracle變數
- PLSQL使用繫結變數SQL變數
- 使用channel代替條件變數變數
- 【優化】使用繫結變數 OR 不使用繫結變數,這不是問題!優化變數
- 動態條件的繫結變數的解決變數
- java程式裡怎麼使用繫結變數Java變數
- 【最佳化】使用繫結變數 OR 不使用繫結變數,這不是問題!變數
- sql 使用變數帶入in條件SQL變數
- oracle 查詢未使用繫結變數的sqlOracle變數SQL
- Oracle 繫結變數Oracle變數
- OLTP系統中儘量使用繫結變數變數
- SQL Server解惑——查詢條件IN中能否使用變數SQLServer變數
- Oracle中如何查詢未使用繫結變數的SQL語句?Oracle變數SQL
- 繫結變數優缺點、使用、繫結變數窺探、 Oracle自適應共享遊標變數Oracle
- oracle中使用繫結變數的好處的例子Oracle變數
- SQL Developer中使用繫結變數SQLDeveloper變數
- 繫結變數的使用範圍變數
- 關於繫結變數的使用變數
- 使用remove_constants工具檢視Oracle是否使用繫結變數REMOracle變數
- 什麼時候使用繫結變數效能反而更差變數
- SQLite中的WHERE子句SQLite
- Oracle之繫結變數Oracle變數
- 使用繫結變數的一點總結!變數
- oracle對非使用繫結變數的語句去重Oracle變數
- oracle找出沒有使用繫結變數的sql語句Oracle變數SQL
- SQL中on條件與where條件的區別[轉]SQL
- 【sql調優】使用繫結變數(二)SQL變數
- 【sql調優】使用繫結變數(一)SQL變數
- PL/SQL中繫結變數使用的簡單測試SQL變數
- ORACLE 繫結變數用法總結Oracle變數
- 關於在SQL語句中ON和WHERE中條件使用的差異SQL
- Oracle 繫結變數窺探Oracle變數
- oracle 繫結變數(bind variable)Oracle變數
- Oracle 繫結變數 詳解Oracle變數
- 如何在對in操作使用變數繫結(轉)變數
- 在繫結變數下使用outline變數