SQL查詢優(yōu)化實例:銀行校園卡繳費的性能優(yōu)化
在開發(fā)應(yīng)用程序時,如果SQL查詢優(yōu)化的語句設(shè)計得不好,可能就會很嚴(yán)重地影響到應(yīng)用程序的性能。因此我們在開發(fā)應(yīng)用程序時,一定要慎用SQL的查詢語句,盡可能地把SQL查詢優(yōu)化做到***。
本文我們通過一個實例來告訴大家在開發(fā)應(yīng)用程序及執(zhí)行SQL查詢優(yōu)化語句時的一些思路,實例如下:在某銀行做校園卡繳費的測試過程中,發(fā)現(xiàn)成功繳費時間很長,大約需要75秒左右,原因分析:在做校園卡繳費的時候,首先是從數(shù)據(jù)庫中查詢到需要繳費的費項,然后再對該費項進(jìn)行繳費,繳費成功后修改相應(yīng)的狀態(tài),交易完成后,查看日志,發(fā)現(xiàn)下面的查詢語句執(zhí)行時間很長,在數(shù)據(jù)庫中執(zhí)行時間大約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';
解決辦法,優(yōu)化此SQL語句(說實話,這個SQL寫得真不好,只是實現(xiàn)了功能,完全沒有考慮性能,尤其當(dāng)數(shù)據(jù)庫大的時候),下面是優(yōu)化后的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'
- )
此語句執(zhí)行時間只有0.219秒,快了很多很多。
總結(jié):在類似于這種交易,先查詢再繳費(改變字段狀態(tài))的交易,執(zhí)行查詢時間的多少直接影響到此交易的性能。假如只是做插入,不做查詢的交易,這種交易一般都很快,有查詢,然后再繳費(改變字段狀態(tài))的交易,如果響應(yīng)時間很慢,那需要在查詢SQL語句上進(jìn)行優(yōu)化了。
關(guān)于SQL查詢優(yōu)化的知識就介紹這么多,希望能夠帶給您一些收獲吧!
【編輯推薦】






