このクエリがありますが、正常に機能していました。
SELECT SUM(amount) FROM company.invoice_line WHERE item_id != shipping
AND item_id != ''
AND invoice_id IN
(SELECT id_invoices FROM company.invoices WHERE customer = 'XX'
AND sales_rep = 'XXX');
目的は、顧客からのすべての担当者の売上を合計することです。顧客データと担当者データは関連付けられてテーブルに格納され、テーブルはテーブルに関連付けられます。invoice
invoice line
invoice
私が使用しているデータサイズの場合、クエリには約0.015秒かかります
id_invoices
クエリ内のを、VARCHARであるが一意のフラグが付けられていない別のPKに変更しました。
その理由は、以前は、invoice
がDBに挿入されるというひどい設計でした。その後、invoice
外部キーとして使用するためにの自動インクリメントされたPKを要求するクエリがすぐに続きました。
BULK INSERTを効果的に使用するには、自動インクリメントされた「バニラ」INT PKに依存せずに、実質的にすべてのデータの一意の識別子にアクセスする必要がありました。これは、上記のように実行し、外部キーとして機能する列を追加するなどして実現しました。
私の挿入率は素晴らしいですが、クエリには7秒以上かかります。
繰り返しになりますが、以前はバニラ自動インクリメントintをPKとして使用していました。外部キーをVARCHARに切り替えると、実際にパフォーマンスが大幅に低下しますか?
次の動きはintidに戻っているように見えますが、MySQLが挿入時に自動インクリメントできるようにする代わりに、これらのintインデックスを手動で作成して、一括挿入を引き続き使用できるようにします。クエリの観点からは、それは問題ではないはずです...そうすべきですか?
どんな助けでもいただければ幸いです。
デーン