作業中のテーブルにデータを取得して挿入するためのより効率的な (より高速な) 方法があることを期待して、この質問をしています。
データテーブルの基本構造は
ID Doc_ID Field Value
1 10 Title abc
2 10 Abstract xyz
3 10 Author Bob
4 11 Publisher Bookworms
5 11 Title zzz
6 11 Abstract bbb
7 12 Title aaa
8 12 Sale No
つまり、データ テーブルは行ベースであり、各行にはドキュメント ID と対応するフィールド値が含まれます。すべてのドキュメントに同じ数のフィールドが定義されているわけではありません。実際、書籍は雑誌とは根本的に異なる場合があります。
データ テーブルは 10,000,000 行で、通常、ドキュメントには 100 のフィールドが関連付けられています。
したがって、私が見つけているパフォーマンスの問題は、50 以上の異なるフィールドを参照してレポートを取得することです。たとえば、order_table にクエリ リストがある場合、クエリは次のようになります。
select ord.number as 'Order ID', d1.value as 'Title', d2.value as 'Author' .......
from order_table ord
LEFT JOIN data_table as d1 on d1.Doc_ID=ord.Doc_ID and d1.Field='Title'
LEFT JOIN data_table as d2 on d2.Doc_ID=ord.Doc_ID and d2.Field='Author'
........
LEFT JOIN data_table as d50 on d50.Doc_ID=ord.Doc_ID and d50.Field='Qty'
フィールドがそのドキュメントに対して定義されているという保証がないため、LEFT JOINS を使用します。
リストを項目 (たとえば、在庫がある、または価格より低い) に制限するための WHERE パラメーターがいくつかある場合、クエリは低速になります。インデックスはあまり役に立ちません。
データ モデルを変更できない場合、大量の情報を引き出す最善の方法は何ですか?