oracle資料庫中,如果你使用in,然後括號對應的是乙個子查詢,當查詢出來的結果》1000的時候就會報錯。
這個是資料庫的規定,我們無法改變它。
如何解決這個問題呢?
現在我看到了三種解決方式:
1、使用in限制範圍為1000,那麼就使用多個in拼接。
in (x,x,x) or in (y,y,y) or in ...
這種方法我嘗試過,感覺最不好用,如果資料量小的話ok,我**才幾萬條資料就卡,相當於執行多條sql語句。
別人的評價:
一般來說,不建議使用很複雜的sql語句。可以簡單的認為,sql語句執行的時間複雜度與sql語句的長度相關。in太多,在資料量過大的時候,可能就不是慢的問題了,而是sql執行執行緒locked。
常見的處理方式,是將「條件部分符合」的資料一次性全從資料庫中拿出來,然後在**中,遍歷這些記錄,找出符合條件(in條件)的記錄。充分利用伺服器的計算能力,以期減少資料庫的壓力。
2、使用臨時表,將in中的內容查詢插入臨時表中。然後子查詢進行匹配。這個我沒有嘗試。有空試試。
前面以為in對應子查詢如果裡面的內容》1000會報錯,嘗試了一下,不報錯。
select * from mpmerdtl where agent_id in(select member_id from mpagent)
3、不要使用in關鍵字,直接使用表連線。個人感覺這種是速度最快的一種。我出現這問題的時候解決方式就是手寫的sql。
left join...
感覺這樣看來解決的三種方案,第一種是因為in的資料是集合,不是表中的,所以拆分成1000以內的n個集合進行查詢拼接。第二種子查詢,第三種連線查詢。
Mybatis入門 Mybatis中新增日誌
log4j 1 什麼是log4j log4j是apache的乙個開源專案。通過使用log4j,我們可以控制日誌資訊輸送的目的地是控制台 檔案 gui元件等。可以控制每一條日誌的輸出格式。通過定義每一條日誌資訊的級別,我們能夠更加細緻地控制日誌的生成過程。這些可以通過乙個配置檔案來靈活地進行配置,而不...
mybatis中 個 問題
最近在用mybatis,之前用過ibatis,總體來說差不多,不過還是遇到了不少問題,再次記錄下,比如說用 和 傳參的區別,使用 傳入引數是,sql語句解析是會加上 比如 select from table where name 傳入的name為小李,那麼最後列印出來的就是 select from ...
mybatis中的說明
1.prefix 在trim標籤內sql語句加上字首。suffix 在trim標籤內sql語句加上字尾。suffixoverrides 指定去除多餘的字尾內容,如 suffixoverrides 去除trim標籤內sql語句多餘的字尾 prefixoverrides 指定去除多餘的字首內容 inse...