當前位置:首頁 » 編程語言 » sql的sum效率
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql的sum效率

發布時間: 2022-06-01 11:26:50

A. 如何提高sql語句的執行效率

1、使用ordered提示

Oracle必須花費大量的時間來剖析多表的合並,用以確定表合並的最佳順序。SQL表達式涉及七個乃至更多的表合並,那麼有時就會需要超過30分鍾的時間來剖析,Ordered這個提示(hint)和其他的提示一起使用能夠產生合適的合並順序。

2、使用ordered_predicates

ordered_predicates提示在查詢的WHERE子句里指定的,並被用來指定布爾判斷(Booleanpredicate)被評估的順序。在沒有ordered_predicates的情況下,Oracle會使用下面這些步驟來評估SQL判斷的順序:子查詢的評估先於外層WHERE子句里的Boolean條件。

所有沒有內置函數或者子查詢的布爾條件都按照其在WHERE子句里相反的順序進行評估,即最後一條判斷最先被評估。每個判斷都帶有內置函數的布爾判斷都依據其預計的評估值按遞增排列。

3、限製表格合並評估的數量

提高SQL剖析性能的最後一種方法是強製取代Oracle的一個參數,這個參數控制著在評估一個查詢的時候,基於消耗的優化器所評估的可能合並數量。

(1)sql的sum效率擴展閱讀:

1、表設計的優化,數據行的長度不要超過8020位元組,如果超過這個長度的話在物理頁中這條數據會佔用兩行從而造成存儲碎片,降低查詢效率。

2、語句的查詢優化,保證在實現功能的基礎上,盡量減少對資料庫訪問次數;

3、建立高效的索引創建索引一般有以下兩個目的:維護被索引列的唯一性和提供快速訪問表中數據的策略。

大型資料庫有兩種索引即簇索引和非簇索引,一個沒有簇索引的表是按堆結構存儲數據,所有的數據均添加在表的尾部,而建立了簇索引的表,其數據在物理上會按照簇索引鍵的順序存儲。個表只允許有一個簇索引。

4、強制查詢轉換,有時候oracle 的優化器未必能走正確的查詢路線,這個時候就需要添加一些hint 之類的來規定他的執行路線。當然了,這個未必是最好的處理方案。因為雖然現在走這個路線是對的,以為因為數據的變化到這這個HINT 變得不可取。

B. plsql 使用sum函數的效率問題

用nvl函數試試,效率高不高就不知道了
select nvl(sum(colA), 0) from tbl group by colB ;

C. sql中SUM()的效率怎樣

sum()是系統函數,執行效率還可以的。

主要的是你group by proct_type這里

D. sql sum函數的用法

這個是返回的一個運算結果列,沒有實際存儲

E. sql中的sum(1)什麼意思有什麼作用

sum()函數是計算總數(值相加),count()是計算記錄數(條數)。
當使用sum(1)時與count(*)相同,都是返回當前條件的記錄數,但count效率會高點。

F. sql 提高多條件查詢效率

可建立一個類別表:CREATE TABLE 類別表(產品編號 char(1),類別 char(20));
再與類別表查詢;或在原表增加此2個欄位。
另外:插入臨時表(以substring(產品編號,1,1)為組)
select distict substring(產品編號,1,1), RTRIM(left(CONVERT(varchar(5), 日期, 0),2)) + ''月'' as 月份,CONVERT(varchar(100),日期,23) as 日期,單號,發貨人,收貨人, sum(abs(數量))as 數量 ,單價, sum(金額) as 金額 from '+ @ckgs +' where substring(產品編號,1,1) like '''+ @cpfl +''' and 單據分類 like '''+@djfl+''' and 產品名稱 like '''+@cpmc+''' and 發貨人 like '''+@ffr +''' and 收貨人 like ''' +@sfr+''' group by 日期,單號,substring(產品編號,1,1), 發貨人,收貨人,單價 into temp;
再查詢temp表。

G. SQL Sum統計問題

Select Truename as 姓名,GongZhong as 工種,JiNengLevel as 崗位等級,(sum(case when Year(AddTime)&'-'&Month(AddTime)='2008-10' then fensum else 0 end)-100*sum(Year(AddTime)&'-'&Month(AddTime)='2008-10' then 1 else 0 end))+100 as 10,(sum(case when Year(AddTime)&'-'&Month(AddTime)='2008-11' then fensum else 0 end)-100*sum(Year(AddTime)&'-'&Month(AddTime)='2008-10' then 1 else 0 end))+100 as 11,(sum(case when Year(AddTime)&'-'&Month(AddTime)='2008-10' then fensum else 0 end)-100*sum(Year(AddTime)&'-'&Month(AddTime)='2008-12' then 1 else 0 end))+100 as 12,sum(fensum) as '總分',sum(fensum)/count(*) as '平均' From CheckInfoUser GROUP BY Truename,GongZhong,JiNengLevel

H. MySQL 有什麼方法提高SUM的性能

CREATE?TABLE?`a`?(
`id`?mediumint(8)?unsigned?NOT?NULL?AUTO_INCREMENT,`fid`?smallint(6)?unsigned?NOT?NULL?DEFAULT?'0',`cnt`?smallint(6)?unsigned?NOT?NULL?DEFAULT?'0',...
...
...
PRIMARY?KEY?(`id`),
KEY?`idx_fid`?(`fid`),
)?ENGINE=MyISAM?DEFAULT?CHARSET=utf8
表b
CREATE?TABLE?`b`?
(`fid`?smallint(6)?unsigned?NOT?NULL?AUTO_INCREMENT,`name`?char(50)?NOT?NULL?DEFAULT?'',
...
...
...
PRIMARY?KEY?(`fid`),
)?ENGINE=MyISAM?DEFAULT?CHARSET=utf8
操作SQL如下:
SELECT?COUNT(*)?AS?num1,?SUM(a.cnt)+COUNT(*)?AS?num2FROM?a,?b
WHERE?b.fid='10913'?AND?a.fid=b.fid
我們先看下執行計劃:
我們可以看到掃描行數是229049行,執行時間:
太可怕了,運行set profiling=1,讓我們看看時間主要消耗在哪裡?
sending data花費的時間較長,那這段時間到底是做什麼的呢?先看下這個吧:http://renxijun.blog.sohu.com/82906360.html意思是它在為select語句准備數據,解決辦法:
建索引:
create index idx_fid_cnt on a (fid,cnt);
再看下,執行計劃和執行時間:
總結:使用恰當的索引,是sql的效率倍增,類似sum的函數還有min(),max(),這些都需要在欄位上建索引。

I. 一個實際的SQL語句效率的問題

--最少總金額
select
top
1
銷售信息表.客戶編號,sum(銷售信息表.銷售數量*產品信息.銷售單價)
from
銷售信息表,產品信息
where
銷售信息表.產品編號=產品信息.產品編號
group
by
銷售信息表.客戶編號
order
by
sum(銷售信息表.銷售數量*產品信息.銷售單價)
--最多總金額
select
top
1
銷售信息表.客戶編號,sum(銷售信息表.銷售數量*產品信息.銷售單價)
from
銷售信息表,產品信息
where
銷售信息表.產品編號=產品信息.產品編號
group
by
銷售信息表.客戶編號
order
by
sum(銷售信息表.銷售數量*產品信息.銷售單價)
desc
--平均銷售總金額
select
銷售信息表.客戶編號,avg(銷售信息表.銷售數量*產品信息.銷售單價)
from
銷售信息表,產品信息
where
銷售信息表.產品編號=產品信息.產品編號
group
by
銷售信息表.客戶編號