一個SQL語句的優化
1.要優化的語句:把表的5個欄位同步到另外一個表
update bu_clear_detail_bak20160412 a
set (a.card_ser_numer,
a.trans_amount2,
a.trans_type_mark,
a.card_online_num,
a.trans_number,
a.issr_mark) =
(select b.card_ser_numer,
b.trans_amount2,
b.trans_type_mark,
b.card_online_num,
b.trans_number,
b.issr_mark
from bu_clear_detail_bak_addcolmns b
where a.id = b.id);
表的統計資料:bu_clear_detail_bak20160412 有23萬資料,bu_clear_detail_bak_addcolmns有30萬資料。表上沒有約束,沒有其他的鎖。
這個語句執行了30分鐘後,還是沒有結果。kill掉。
2.兩個表資料量不大。為了確定這個語句能不能更新,是否有鎖,可以加個約束條件,執行1000條。如:
update bu_clear_detail_bak20160412 a
set (a.card_ser_numer,
a.trans_amount2,
a.trans_type_mark,
a.card_online_num,
a.trans_number,
a.issr_mark) =
(select b.card_ser_numer,
b.trans_amount2,
b.trans_type_mark,
b.card_online_num,
b.trans_number,
b.issr_mark
from bu_clear_detail_bak_addcolmns b
where a.id = b.id)
where rownum < 1000 ;
時間為3分18秒。這個可以證明的是:更新語句沒有被其他物件鎖住。更新速度很慢。
3.猜想這個語句的執行計劃,應該不難,從bu_clear_detail_bak20160412表裡取出一條資料,去bu_clear_detail_bak_addcolmns表中檢索相同的ID,然後把5個欄位更新如此迴圈100次。bu_clear_detail_bak_addcolmns表有30萬資料,迴圈30萬X100次。是不是想到解決辦法了,對,就是加索引。在表bu_clear_detail_bak_addcolmns的ID列加索引。測試,全部更新,30秒完成
4.問題是完美解決了,但是研究沒有停止.把表bu_clear_detail_bak_addcolmns的索引刪除,我們來看看它執行的系統指標表現:
us為20%,用10046事件跟蹤SQL都是db file scattered read等待事件,TOP SQL
update bu_clear_detail_bak20160412 a
set (a.card_ser_numer,
a.trans_amount2,
a.trans_type_mark,
a.card_online_num,
a.trans_number,
a.issr_mark) =
(select b.card_ser_numer,
b.trans_amount2,
b.trans_type_mark,
b.card_online_num,
b.trans_number,
b.issr_mark
from bu_clear_detail_bak_addcolmns b
where a.id = b.id);
表的統計資料:bu_clear_detail_bak20160412 有23萬資料,bu_clear_detail_bak_addcolmns有30萬資料。表上沒有約束,沒有其他的鎖。
這個語句執行了30分鐘後,還是沒有結果。kill掉。
2.兩個表資料量不大。為了確定這個語句能不能更新,是否有鎖,可以加個約束條件,執行1000條。如:
update bu_clear_detail_bak20160412 a
set (a.card_ser_numer,
a.trans_amount2,
a.trans_type_mark,
a.card_online_num,
a.trans_number,
a.issr_mark) =
(select b.card_ser_numer,
b.trans_amount2,
b.trans_type_mark,
b.card_online_num,
b.trans_number,
b.issr_mark
from bu_clear_detail_bak_addcolmns b
where a.id = b.id)
where rownum < 1000 ;
時間為3分18秒。這個可以證明的是:更新語句沒有被其他物件鎖住。更新速度很慢。
3.猜想這個語句的執行計劃,應該不難,從bu_clear_detail_bak20160412表裡取出一條資料,去bu_clear_detail_bak_addcolmns表中檢索相同的ID,然後把5個欄位更新如此迴圈100次。bu_clear_detail_bak_addcolmns表有30萬資料,迴圈30萬X100次。是不是想到解決辦法了,對,就是加索引。在表bu_clear_detail_bak_addcolmns的ID列加索引。測試,全部更新,30秒完成
4.問題是完美解決了,但是研究沒有停止.把表bu_clear_detail_bak_addcolmns的索引刪除,我們來看看它執行的系統指標表現:
us為20%,用10046事件跟蹤SQL都是db file scattered read等待事件,TOP SQL
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30393770/viewspace-2081993/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 一條sql語句的優化SQL優化
- SQL語句的優化SQL優化
- SQL語句優化SQL優化
- SQL Server優化之SQL語句優化SQLServer優化
- SQL 語句的優化方法SQL優化
- 一條SQL語句的優化過程SQL優化
- 一次sql語句優化的反思SQL優化
- MYSQL SQL語句優化MySql優化
- sql語句效能優化SQL優化
- 求助:SQL語句優化SQL優化
- 優化 SQL 語句的步驟優化SQL
- 關於sql語句的優化SQL優化
- sql語句的優化案例分析SQL優化
- MySQL之SQL語句優化MySql優化
- SQL語句優化(轉載)SQL優化
- 常用SQL語句優化技巧SQL優化
- Oracle之sql語句優化OracleSQL優化
- MySQL 52個SQL效能優化策略SQL語句彙總MySql優化
- oracle優化sql語句的一些建議Oracle優化SQL
- 通過分析SQL語句的執行計劃優化SQL語句SQL優化
- 對sql語句的優化問題SQL優化
- 優化SQL 語句 in 和not in 的替代方案優化SQL
- MySql 學習筆記一:SQL語句優化MySql筆記優化
- 一個connect by查詢語句的優化優化
- 一個insert插入語句很慢的優化優化
- Oracle SQL語句優化之UNIONOracleSQL優化
- SQL語句操作符優化SQL優化
- SQL語句優化技術分析SQL優化
- SQL語句優化方法30例SQL優化
- [zt] 基於索引的SQL語句優化索引SQL優化
- 資料庫效能優化之SQL語句優化資料庫優化SQL
- 淺談mysql配置優化和sql語句優化MySql優化
- 一條sql語句優化不出來, 哭了一鼻子SQL優化
- SQL優化案例-單表分頁語句的優化(八)SQL優化
- oracle效能問題:sql語句優化OracleSQL優化
- SQL語句優化方法30例(轉)SQL優化
- SQL語句優化--十條經驗SQL優化
- ORACLE SQL語句優化技術分析OracleSQL優化