SQL查詢優化實例:銀行校園卡繳費的性能優化
在開發應用程序時,如果SQL查詢優化的語句設計得不好,可能就會很嚴重地影響到應用程序的性能。因此我們在開發應用程序時,一定要慎用SQL的查詢語句,盡可能地把SQL查詢優化做到***。
本文我們通過一個實例來告訴大家在開發應用程序及執行SQL查詢優化語句時的一些思路,實例如下:在某銀行做校園卡繳費的測試過程中,發現成功繳費時間很長,大約需要75秒左右,原因分析:在做校園卡繳費的時候,首先是從數據庫中查詢到需要繳費的費項,然后再對該費項進行繳費,繳費成功后修改相應的狀態,交易完成后,查看日志,發現下面的查詢語句執行時間很長,在數據庫中執行時間大約74.516秒,可見幾乎所有的時間都花在查詢上。
- select b.stu_id, b.term_id, b.cost_code
- from bib_booking_student_info a, bib_booking_fee_info b
- where a.busi_id = b.busi_id
- and a.corp_id = b.corp_id
- and a.term_id = b.term_id
- and a.stu_id = b.stu_id
- and b.stu_stat = '0'
- and a.busi_id = '100104'
- and a.corp_id = 'E000000059'
- and a.term_id = '0101'
- and a.stu_id = '59000030';
解決辦法,優化此SQL語句(說實話,這個SQL寫得真不好,只是實現了功能,完全沒有考慮性能,尤其當數據庫大的時候),下面是優化后的SQL語句:
- select b.stu_id, b.term_id, b.cost_code
- from bib_booking_fee_info b
- where b.stu_stat = '0'
- and exists( select 1 from bib_booking_student_info a where
- a.corp_id = b.corp_id
- and a.term_id = b.term_id
- and a.stu_id = b.stu_id
- and a.busi_id = b.busi_id
- and a.busi_id = '100104'
- and a.corp_id = 'E000000059'
- and a.term_id = '0101'
- and a.stu_id = '59000030'
- )
此語句執行時間只有0.219秒,快了很多很多。
總結:在類似于這種交易,先查詢再繳費(改變字段狀態)的交易,執行查詢時間的多少直接影響到此交易的性能。假如只是做插入,不做查詢的交易,這種交易一般都很快,有查詢,然后再繳費(改變字段狀態)的交易,如果響應時間很慢,那需要在查詢SQL語句上進行優化了。
關于SQL查詢優化的知識就介紹這么多,希望能夠帶給您一些收獲吧!
【編輯推薦】