操作系統:Windows 2007
數據庫版本:SQL SERVER 2005
發表日期:2014-11-07?16:56:01
今天同事讓我看一條SQL,說是在前臺查詢很快,但是把SQL取出來,在數據庫中執行的時候,跑10分鐘都不出結果。
看了一下SQL,最后定位到一個視圖中的一個子查詢上面。該子查詢的SQL文本如下:
SELECT acinv_07.id_item , SUM (acinv_07.dec_endqty) dec_endqty FROM acinv_07 WHERE acinv_07.fiscal_year * 100 + acinv_07.fiscal_period = ( SELECT DISTINCT ctlm1101.fiscal_year * 100 + ctlm1101.fiscal_period FROM ctlm1101 WHERE flag_curr = ' Y ' AND id_oprcode = ' acinv ' AND acinv_07.id_wh = ctlm1101.id_table) GROUP BY acinv_07.id_item
在acinv_07表上的列fiscal_year和列fiscal_period是有索引的。但是,如果對索引列進行運算,就會導致原本可以走索引的走不了索引。于是,動手改寫成如下SQL:
SELECT id_item , SUM (dec_qty) dec_qty FROM dpurreq_03 GROUP BY id_item ) a , ( SELECT a.id_item , SUM (a.dec_endqty) dec_endqty FROM acinv_07 a , ( SELECT DISTINCT ctlm1101.fiscal_year , ctlm1101.fiscal_period , id_table FROM ctlm1101 WHERE flag_curr = ' Y ' AND id_oprcode = ' acinv ' ) b WHERE a.fiscal_year = b.fiscal_year AND a.fiscal_period = b.fiscal_period AND a.id_wh = b.id_table GROUP BY a.id_item
再執行,4s鐘左右就可以跑出結果了。
對于開發來說,純粹是為了實現把結果數據展示出來,而不會過多考慮SQL的性能問題。
?
總結
寫SQL時,不到萬不得已,不要對索引列進行計算。
?

更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
