- PR -

全件サマリーのレスポンスについて

1
投稿者投稿内容
つる
ベテラン
会議室デビュー日: 2004/06/02
投稿数: 81
投稿日時: 2007-06-22 19:00
お世話になっております。

例えば下記のようなテーブルでレコードが100万行程あったとします。
商品コード|商品名|金額
----------------------------------
A000000001|商品A| 100
B000000001|商品B| 100
A000000001|商品A| 100
B000000001|商品B| 100
C000000001|商品C| 100
A000000001|商品A| 100
D000000001|商品D| 100

商品毎に全件サマリーなら下記のようなSQL文になると思うのですが、
レスポンスが悪くて困っています。
*select 商品名,sum(金額) as 合計 from table group by 商品名

where 商品コード = 'A000000001'などであれば、商品コードに
インデックスを張ったりすれば良いと思うのですが、
こういう場合は、マシンパワーにゆだねるのしかないのでしょうか?

それとも何か方法があるのでしょうか?

ご教授下さい。よろしくお願いします。
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2007-06-22 19:42
RDBMSによりますが、

コード:
create index t1ix1 on t1
(商品名,金額)



といったインデクスをつけておけば、
インデクスをサーチするだけで処理してくれます。
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2007-06-22 20:29
書き方が悪かったかも。

私の使用していたRDBMSでは、条件式、集合関数、order by等の
組み合わせでもインデクスを有効利用可能でした。

つるさんの使用しているRDBMSでも、インデクスを有効利用できないか
確認してみてください。
つる
ベテラン
会議室デビュー日: 2004/06/02
投稿数: 81
投稿日時: 2007-06-25 09:21
忠犬様

返信ありがとうございます。
SQLサーバーはマイクロソフトのSQL2000です。

GroupBY句に該当する項目を全て入れたインデクスが良いのでしょうか?

例えば・・・・
select A,B,C,sum(金額) from table where 金額 <> 0 group by A,B,C
と言った場合は、A,B,C,金額 でインデクスを作成


かめたろ
ぬし
会議室デビュー日: 2003/03/20
投稿数: 255
投稿日時: 2007-06-25 10:58
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/createdb/cm_8_des_06_6ptj.asp
「インデックス付きビュー」も検討してみてはいかがでしょうか。

これを使用できるのは、SQLServerの2000だとEnterprise Edition またはDeveloper Edition だけのようです。2005だと全Editionで使用できるようです。
忠犬
大ベテラン
会議室デビュー日: 2006/05/01
投稿数: 109
投稿日時: 2007-06-25 18:42
引用:

例えば・・・・
select A,B,C,sum(金額) from table where 金額 <> 0 group by A,B,C
と言った場合は、A,B,C,金額 でインデクスを作成



「group by」の処理の背景で、ソートが必要になります。「group by」の指定
通り(列の順、昇降の指定)のインデクスがあれば、いくつかのRDBMSでは、
ソート抑止してくれます。
したがって、「group by A,B,C」のように指定するなら、「A,B,C」で構成
したインデクスがないと、ソート抑止できません。
さらに、「sum(金額)」でもインデクスが利用可能なように、「A,B,C,金額」
でインデクスを構成すれば、「インデクスだけでグループ毎の集計」が行なう
ことが可能になります。
これは、私が長年、関係してきたRDBMSのオプティマイザでの話なので、SQL Server
2000でも期待通りになるかは、アクセス計画等を確認してみてください。
つる
ベテラン
会議室デビュー日: 2004/06/02
投稿数: 81
投稿日時: 2007-06-25 20:40
お世話になっております。

かめたろ様
残念ながらSQL2000のスタンダードです・・・

忠犬様
インデクスというのは、難しいですね。
色々とインデクスを張ってみたのですが、
結果変わらずが現状です。

ですが、やり始めたばかりなので、しばらく
格闘してみます。このインデクスというものに・・・

ありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)