對索引的一點理解

2021-08-31 11:02:09 字數 1145 閱讀 6698

以前在網上看到一些觀點,in 或者not in 都不會用到索引,昨天在優化sql的時候,發現這些觀點並不對

select *

from wf_doc_gw_fawen f

where f.cfbt = 'ee' and

f.ndocid in (select distinct gi.src_ndocid

from wf_doc_gw_inner gi,

wf_doc_gw gw

where gi.ndocid = gw.ndocid and

instr(', ' || gw.cprocuserlist || ', ',

', ' || to_char(45901) || ', ') > 0 and

gi.returnstatus is null and

gi.src_ndocid is not null)

從上面的執行計畫中可以看到wf_doc_gw_fawen的ndocid欄位在執行in的操作中用到了索引,如果子查詢的記錄數超過一定數量,in的操作也就不會用到索引了。

如果把in或為not in,wf_doc_gw_fawen的ndocid欄位是不會用到索引的,不管子查詢的數量是多還是少,但是出現了另外一種情況,wf_doc_gw_inner的src_ndocid欄位用到了索引,如下

select *

from wf_doc_gw_fawen f

where f.cfbt = 'ee' and

f.ndocid not in (select distinct gi.src_ndocid

from wf_doc_gw_inner gi,

wf_doc_gw gw

where gi.ndocid = gw.ndocid and

instr(', ' || gw.cprocuserlist || ', ',

', ' || to_char(45901) || ', ') > 0 and

gi.returnstatus is null and

gi.src_ndocid is not null)

由此推斷,oracle在解析,編譯sql語句的時候,對我們寫的sql進行了變換,把子查詢的字段和主查詢的字段進行了關聯

對 threadfence的一點理解

一直沒搞清楚,cuda 2.2版增加的 threadfence到底有何作用,直到今天看到sdk 3.0手冊 中的下面例子才恍然大悟.中文為我的理解,嘿嘿 乙個求和的例子 device unsigned int count 0 統計有幾個block結束的變數 shared bool islastblo...

對GBDT的一點理解

gbdt由一系列的回歸樹組成,如下圖所示 樹的深度未必都要一樣,下圖僅為示意圖 gbdt原理 針對每乙個類別訓練一系列的回歸樹,再累加每個類別回歸樹的 值得到針對每個類別的最終的 值。單獨拿乙個類別來說,訓練的過程中假設需要 的值為f xi 實際的值為yi 有loss function l yi,f...

對block的一點理解

對block的理解 block宣告的寫法 property strong,nonatomic void block void property copy,nonatomic void block void block的本質 就是oc的物件,內部也有isa指標,block是封裝了函式呼叫以及函式呼叫環...