原文:
避免對索引列進行計算
作業系統:windows 2007
資料庫版本:sql server 2005
發表日期:2014-11-07 16:56:01
今天同事讓我看一條sql,說是在前台查詢很快,但是把sql取出來,在資料庫中執行的時候,跑10分鐘都不出結果。
看了一下sql,最後定位到乙個檢視中的乙個子查詢上面。該子查詢的sql文字如下:
selectacinv_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:
selectid_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...