91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用JDBC Update時不能使用索引的原因是什么

發布時間:2021-07-14 16:10:12 來源:億速云 閱讀:134 作者:chen 欄目:編程語言

這篇文章主要介紹“使用JDBC Update時不能使用索引的原因是什么”,在日常操作中,相信很多人在使用JDBC Update時不能使用索引的原因是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”使用JDBC Update時不能使用索引的原因是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

表DYN_DAYAHEAD_BID按時間data_time分區,有5個分區,建立了一個本地分區索引index ind_dyn_daybid_store,索引列是data_time, tag_phy, tag_app,version四個字段。

一直以來,覺得JDBC Update修改數據時特別慢(根據業務邏輯,往往是一次update 481條記錄)。今天trace了應用程序的執行計劃(應用程序通過jdbc訪問數據庫,數據庫版本為oracle 9.2.0.1)。通過jdbc的執行計劃(trace文件)如下:

select Data_Time,Tag_Phy,Tag_App,Value_0,Value_1,Value_2,Value_3,Value_4,    Value_5,Value_6,Value_7,Value_8,Value_9,Version   from  DYN_DAYAHEAD_BID where Tag_Phy = :1 and version = :2 and Data_Time > :3 and     Data_Time <= :4+1 and Tag_App in ('5TMS01DBS07','5TMS01DBS08','5TMS01DBS09',    '5TMS01DBS10','5TMS01DBS11','5TMS01DBS12')    call     count       cpu    elapsed       disk      query    current        rows  ------- ------  -------- ---------- ---------- ---------- ----------  ----------  Parse        1      0.00       0.00          0          0          0           0  Execute      1      0.00       0.00          0          0          0           0  Fetch       49      0.04       0.02          0        609          0         481  ------- ------  -------- ---------- ---------- ---------- ----------  ----------  total       51      0.04       0.02          0        609          0         481   Misses in library cache during parse: 1  Optimizer goal: CHOOSE  Parsing user id: 62     Rows     Row Source Operation  -------  ---------------------------------------------------      481  PARTITION RANGE ITERATOR PARTITION: 1 KEY       481   TABLE ACCESS BY LOCAL INDEX ROWID DYN_DAYAHEAD_BID PARTITION: 1 KEY       481    INDEX RANGE SCAN IND_DYN_DAYBID_STORE PARTITION: 1 KEY (object id 30391)   ....  update DYN_DAYAHEAD_BID set Value_0 = :1 , Value_1 = :2 , Value_2 = :3 ,     Value_3 = :4 , Value_4 = :5 , Value_5 = :6 , Value_6 = :7 , Value_7 = :8 ,     Value_8 = :9 , Value_9 = :10   where  Data_Time= :11 and Tag_Phy= :12 and Tag_App= :13 and Version= :14    call     count       cpu    elapsed       disk      query    current        rows  ------- ------  -------- ---------- ---------- ---------- ----------  ----------  Parse      481      0.02       0.03          0          0          0           0  Execute    481     12.85      13.23        346     277537        500         481  Fetch        0      0.00       0.00          0          0          0           0  ------- ------  -------- ---------- ---------- ---------- ----------  ----------  total      962     12.87      13.26        346     277537        500         481   Misses in library cache during parse: 1  Optimizer goal: CHOOSE  Parsing user id: 62     Rows     Row Source Operation  -------  ---------------------------------------------------        0  UPDATE          1   PARTITION RANGE ALL PARTITION: 1 5         1    TABLE ACCESS FULL DYN_DAYAHEAD_BID PARTITION: 1 5

顯然,查詢時是JDBC Update用到了索引,而修改時JDBC Update沒有使用索引,但我在sqlplus下執行類似的語句,則明顯的使用了索引:

SQL> update DYN_DAYAHEAD_BID set value_0=111      where data_time=to_date('2006-04-14 0:15:00','yyyy-mm-dd hh34:mi:ss')       and tag_phy='303101120211' and tag_app='5TMS01DBS07' and version=1 SQL> /

JDBC Update已更新 1 行。

Execution Plan  ----------------------------------------------------------     0      UPDATE STATEMENT Optimizer=CHOOSE (Cost=2 Card=1 Bytes=51)     1    0   UPDATE OF 'DYN_DAYAHEAD_BID'     2    1     INDEX (UNIQUE SCAN) OF 'IND_DYN_DAYBID_STORE' (UNIQUE) (            Cost=1 Card=1 Bytes=51)

然后,我對程序中的sql語句增加了hint,強制使用索引,然后程序的執行計劃如下:

update  /*+ INDEX(dyn_dayahead_bid ind_dyn_daybid_store) */ DYN_DAYAHEAD_BID     set Value_0 = :1 , Value_1 = :2 , Value_2 = :3 , Value_3 = :4 , Value_4 =     :5 , Value_5 = :6 , Value_6 = :7 , Value_7 = :8 , Value_8 = :9 , Value_9 =     :10   where  Data_Time= :11 and Tag_Phy= :12 and Tag_App= :13 and Version= :14    call     count       cpu    elapsed       disk      query    current        rows  ------- ------  -------- ---------- ---------- ---------- ----------  ----------  Parse      481      0.04       0.02          0          0          0           0  Execute    481     11.37      11.48          0     247234        502         481  Fetch        0      0.00       0.00          0          0          0           0  ------- ------  -------- ---------- ---------- ---------- ----------  ----------  total      962     11.41      11.50          0     247234        502         481   Misses in library cache during parse: 0  Optimizer goal: CHOOSE  Parsing user id: 62     Rows     Row Source Operation  -------  ---------------------------------------------------        0  UPDATE          1   PARTITION RANGE ALL PARTITION: 1 5         1    INDEX FULL SCAN IND_DYN_DAYBID_STORE PARTITION: 1 5 (object id 30391)

現在看起來是JDBC Update使用了索引,但好像對索引進行全表掃描,跟查詢和在sqlplus下使用范圍掃描不一樣。

到此,關于“使用JDBC Update時不能使用索引的原因是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

达拉特旗| 巫溪县| 昂仁县| 奉贤区| 湟中县| 北京市| 东阿县| 应用必备| 保亭| 全南县| 苏尼特右旗| 平山县| 和平区| 宽城| 铜陵市| 石嘴山市| 仁化县| 行唐县| 桦川县| 廉江市| 丽江市| 油尖旺区| 葫芦岛市| 怀远县| 扶沟县| 仁怀市| 巴中市| 萨嘎县| 南阳市| 永州市| 宁陵县| 尤溪县| 淮安市| 江山市| 抚顺市| 喀什市| 阿坝县| 霍林郭勒市| 四平市| 苍梧县| 浮梁县|