受注テーブル(tbl_Jyutyu)に対する、出荷履歴テーブル(tbl_Rireki)の内、最終行を取得したい。
現在は、以下の様なクエリーで、出荷履歴テーブルの自分自身の出荷回数(intKaisuu)が、最大値の行を集めている。
出荷がない(レコードがない)データもあるため、左方結合している。
目的のデータは出力できるの、速度が出ないためもっといい方法があれば、教えて頂きたいと思い投稿しています。
select J.intJyutyuNo, ... , R.datSyukkaDay from tbl_Jyutyu J
left outer join tbl_Rireki R
on R.intJyutyuNo = J.intJyutyuNo
and R.intKaisuu = (select max(intKaisuu) from tbl_Rireki R2
where R2.intJyutyuNo = R.intJyutyuNo)
where J.intJyutyuNo > 0
実際にはもっと複雑で、受注に対する明細、また、発注テーブル等との結合しています。
(これも発注無しデータもあるため左方結合しています。)
データ件数は受注数十万件、明細行数百万件あるため、条件によっては、タイムアウトしてしまう。
left outer join が原因、そもそもテーブル設計に問題があるのかも知れませんが、その変更は現在できません。
地道に、速度アップするようにクエリー変更しています。同じクエリーでも、テストデータと現場データでは、
速度が逆転してしまい、苦労しています。
どなたかアドバイス頂ければ幸いです。よろしくお願い致します。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
いくつか方策はありますが、
あまりにも情報が大雑把なので答えようがないと思います。
チューニングの観点から助言を求めるのであれば、各テーブルのキーや外部キー、データ型がわからないとなんともいえませんし、もちろんSQL全文がないと答えようがありません。
また、
システムアーキテクチャの観点から助言を求めるのであれば実行環境はもちろん、今回の求めたい結果がデータハウスとしての運用されるのか?、それともOLAPの業務運用の一環にもちいられるのか?
どこまでリアルタイム性が求められるのか?
等がわからないと答えようがありません。
要件と制約といったシステム全体がわからない第三者が
仕様の一部だけを抜き出して提示され、最適化したいと問われたところで助言をすることは不可能だと思われます。
この回答への補足
hidebu-さん、ご回答ありがとうございます。
情報が大雑把で申し訳ありません。
データウェアハウスやOLAPと言ったものは利用していません。MSSQL Server7で単一のデータベース内での運用です。
要件と制約と言われると、どのように説明すればいいのか分からないのですが。
完全にリアルタイムで、検索する必要があります。検索条件を入れて検索のアクションで、動的にクエリーを作成しています。
目的は、分析ではなく、多くの場合には、特定の一件を検索。また多くても数十件の検索することです。
顧客名や電話番号、商品コードや出荷日等を条件として絞り込みます。
受注データ(1受注、1明細)が先に作成され、この受注データに対して、受注番号を持った顧客、出荷、発注等の別テーブルにレコードが後から作成される。
顧客や出荷データが無くても、受注を出力する必要があるため、left outer join のオンパレード、遅くなっても仕方が無い状態です。
ごめんなさい。余計に分かりづらい、概要説明になってしまいました。
他方に無い行を出力するには、left(right) outer join しかないですよね。最近あきらめモードになっています(^^;
どうも、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- Oracle SQL update方法 2 2022/06/22 14:07
- Oracle 質問です。 下記のテーブルとデータがあり、 取得想定結果のように出力したいです。 下記のsqlだと0 2 2023/05/23 19:10
- MySQL 複数DBテーブルからのデータ取得 3 2022/05/17 15:02
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Oracle 下記のsqlで取得されるレコード以外を取得する方法ありますでしょうか。 SELECT B.番号, B 2 2022/04/20 23:21
- MySQL PhpMyAdminで作成して実行せよ。 東京23区を、皇居を中心とした4つのエリア(南東, 南西, 1 2023/06/11 11:58
- その他(データベース) accessでの請求管理について 2 2022/06/13 21:51
- その他(データベース) accessについて 2 2022/05/31 16:58
- Visual Basic(VBA) VBAチェックボックスで有効無効切り替えできるように 5 2022/10/21 16:13
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
テーブルで一番古いレコードだ...
-
Accessのテーブルデータを一気...
-
MySQL、Accessを利用したDBの設計
-
ACCESS2000でのリンクテーブル...
-
重複クエリを使ったデータ削除
-
クエリとパススルークエリを作...
-
SQL Server に画像を登録
-
Access(MDB)の複製(レプリケー...
-
結合テーブルでINSERTする方法...
-
MYSQLでコード番号を自動でつけ...
-
ビューのソートについて
-
アクセス ユニオンクエリ上手く...
-
MySQLのDB内容をWEB上に表示す...
-
SQL:複数行のデータを一つの文...
-
mysqlへの書き込みがリロードす...
-
Accessでレコード削除ができな...
-
MySQLの容量の削減の仕方
-
Access昇順レコードを、5分割...
-
accessでレコード更新直後の反...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
ビューのソートについて
-
Oracleで上書きImportはできま...
-
結合テーブルでINSERTする方法...
-
accessでレコード更新直後の反...
-
このISAMでは、リンクテーブル・・
-
アクセス レコードセットを更...
-
重複クエリを使ったデータ削除
-
処理の途中で停止させ、再開さ...
-
マテリアライズドビューとスナ...
-
同一テーブルのデータを参照し...
-
ERROR1062:Duplicate entry.......
-
「クリップボードにコピーされ...
-
ORA-01401が表示され、データが...
-
ACCESSで容量が50MBになった...
-
Accessでの稼働日数計算の方法
-
構文エラー : 演算子がありませ...
-
MS Accessを共有した際にファイ...
おすすめ情報