- PR -

SQL文について質問したいのですが。

投稿者投稿内容
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2003-09-29 16:36
platiniさん
スガさん
リックスさん

返信ありがとうございます。
肝心な事を書き忘れておりました。
DBはPostgreSQLです。すみませんでした。

GROUP BY 句は、初めて使用します。
集計を行う際に使用するのですね。
勉強になりました。
PostgreSQLでもうまく取得する事ができました。
ありがとうございました。

でも、ちょっと気になる事があるのですが。
DBの件数は「1970件」なのですが、
SQLの応答時間が長いような気がするのですが。
下記のようなSQL文ですと、応答時間が「0.020000秒」です。
select * from sinsei_tbl where product_no = 'a0001000'
GROUP BY 句を使用すると、多少処理が遅くなるのでしょうか?

platiniさん
  SQL応答時間:16.063000秒
スガさん
  すみません。エラーとなって実行できませんでした。
  ERROR: Column reference "product_no" is ambiguous
リックスさん
  SQL応答時間:13.519000秒
platini
大ベテラン
会議室デビュー日: 2002/12/03
投稿数: 193
投稿日時: 2003-09-29 17:06
Group byを使用すると、遅くなるのは間違いないです。
SQLの演算スピードとしては早くなることはありません。
(SQLのParse処理は少なくともselect * from より明らかにかかる)
ただ、元データがもっと件数が多い場合、
SQLの実行開始(着手)時間は select * のほうが
速いかわりに、結果のデータ量はgroup byのほうが
少なくなるので、その分早くなるときがあるかもしれません。

product_noと、sinsei_idで複合索引を作成すると、
速くなるように思います。(もう索引作ってますか?)
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2003-09-29 17:19
platiniさん

返信ありがとうございます。
引用:

Group byを使用すると、遅くなるのは間違いないです。
SQLの演算スピードとしては早くなることはありません。
(SQLのParse処理は少なくともselect * from より明らかにかかる)
ただ、元データがもっと件数が多い場合、
SQLの実行開始(着手)時間は select * のほうが
速いかわりに、結果のデータ量はgroup byのほうが
少なくなるので、その分早くなるときがあるかもしれません。


本当に勉強になります。ありがとうございます。

>product_noと、sinsei_idで複合索引を作成すると、
>速くなるように思います。(もう索引作ってますか?)
申し訳ないのですが、「複合索引」というのは何でしょうか?
インデックスの事ですか?
product_noとsinsei_idはPRIMARY KEYで登録しておりますので、
インデックスはできているのですが。
ほむら
ぬし
会議室デビュー日: 2003/02/28
投稿数: 583
お住まい・勤務地: 東京都
投稿日時: 2003-09-29 17:25
ども、ほむらです。
group by は内部的にデータをソートしているはずなので
処理時間が遅くなるのはそのためだと思います。
group by に限らず、distinct(重複削除)を使用した場合も同様のはず。

# 記述内容が不安なので削除

[ メッセージ編集済み 編集者: ほむら 編集日時 2003-09-29 17:29 ]
たるたる
会議室デビュー日: 2003/09/29
投稿数: 16
投稿日時: 2003-09-29 17:38
どうも、はじめまして。

platiniさんのSQLが通るようでしたら、GROUP BY句の前に
where b.product_no = a.product_no
を追加してみてはいかがでしょうか?
みーちく
大ベテラン
会議室デビュー日: 2002/08/29
投稿数: 131
投稿日時: 2003-09-29 19:09
ほむらさん
たるたるさん

返信ありがとうございました。
たるたるさんの通りに、where句を追加した結果、
SQL文の応答時間がすごく短縮されました。

where句を追加しない場合
  SQL応答時間:17.055000秒

where句を追加した場合
  SQL応答時間:1.282000秒

皆様。
本当に今回はありがとうございました。
そして、大変勉強になりました。
また、何かありましたら宜しく御願い致します。
パルプ
ベテラン
会議室デビュー日: 2003/06/18
投稿数: 59
投稿日時: 2003-09-29 20:35
蛇足的な投稿になってしまいますが、
上での間違いを訂正しておきます。。
(PostgreSQLで動くと思います)

引用:


SELECT s.product_no, s.sinsei_id, s.apply_flag, s.staff_cd
FROM sinsei_tbl AS s,
(SELECT product_no, max(sinsei_id)
FROM sinsei_tbl GROUP BY product_no) AS m
WHERE s.product_no=m.product_no
AND s.sinsei_id=m.max;




何にせよ、問題を解決なされているようなので何よりです!
リックス
常連さん
会議室デビュー日: 2001/10/01
投稿数: 47
お住まい・勤務地: 東京
投稿日時: 2003-09-29 21:26
こんばんは。完全に話題よりそれてしまいますが、
@ITさまにご要望です。

今回のスレッドに参加して思ったことですが、データベース・SQLの話題を
「IP Network」で行うのには違和感がありました。

開発・運用管理のどちらも、ネットワークとはスキルの重複がありません。

また、今回のクエリーの組み方にしても、プログラミングの(手続き的な)考え方とも
違う、ある種独特(セット指向)の考え方やスキルが要求されます。

データベースというカテゴリーで、独立したフォーラム・BBSがあったほうが
良いと感じました。

いきなり不躾な内容となってしまいましたが、検討していただければと思います。

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