避免對索引列進行計算

2021-09-06 19:29:15 字數 1654 閱讀 2184

原文:

避免對索引列進行計算

作業系統: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

byid_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時,不到萬不得已,不要對索引列進行計算。

python對列進行平移變換 shift

在進行資料操作時,經常會碰到基於同一列進行錯位相加減的操作,即對某一列進行向上或向下平移 shift 往常,我們都會使用迴圈進行操作,但經過查閱相關資料,發現結合pandas裡的groupby和shift兩個函式就能輕鬆實現上述要求.建立樣例資料 temp pd.dataframe tempout ...

python對列表進行統計計算

1 獲取指定元素出現的次數 使用count 方法可以獲取指定元素在列表 現的次數,基本語法如下 listname.count obj listname 表示列表名稱 obj 表示判斷是否存在物件,這裡只能進行精確匹配,即不能是元素的一部分 例項 talk 你們說 我資訊保安小萌新帥不帥!不帥!num...

動態SQL對各列進行求和運算

如下表 id f1 f2 f3 f4 f5 f6.1 a b 12 25 10 20 2 a b 20 5 10 21 3 c d 12 123 1 21 我想達到如下效果 將f1,f2相同記錄進行合併後只保留一條 列出所有字段 並對f3進行sum求和 請問sql語句該怎麼寫?動態sql creat...