-3

したがって、私のデータベースには数十万のメンバーがあり、処理ソフトウェアは明らかにこのサイズのデータ​​ベース向けではありませんでした。そのため、いくつかの重大な遅延の問題があります。誰かがこの厄介なクエリのトリックを持っているかどうか興味がありました.

SELECT COUNT(DISTINCT member_id) AS active
           FROM amember_payments
           WHERE completed > 0 AND expire_date >= '2012-08-01' AND amount > 0

データベース全体をスキャンします。

4

2 に答える 2

2

スキャンする場合は、インデックスが必要です。クエリから、completed、expire_date、および amount 列のインデックスを追加する必要があるようです。しかし、データをよく知らなければ、使用する正確な順序はわかりません。

于 2012-08-06T19:34:10.230 に答える
2

インデックスを追加する必要があるようです。データ分布を知らなければ、どの列に追加すればよいかはわかりませんが、私の勘では「expire_date」が最適な場所であることが示唆されます。インデックスは、SQL サーバーがテーブル スキャンなしで考慮対象から行をすばやく削除できるように、最も明確なフィールドに配置する必要があります。

于 2012-08-06T19:32:57.990 に答える