私は2億を少し上回るレコードを含む注文テーブルを持っています。統計については、私は3つの異なるカウントを取得する必要があります。 1つは、特定の日付範囲内に置かれた注文の数、特定の状態から発注された注文数、そして特定の日付範囲内の特定の状態からの注文数です。最初の2つのクエリは平均して10〜20百万レコードを返し、通常は5秒以下かかる。しかし、3時間以内に結果を返すための3番目のクエリを取得できませんでした。実際のクエリは次のとおりです。MySQL 2つのパラメータの数を取得する
SELECT COUNT(*)
FROM orders
WHERE order_date BETWEEN date1 AND date2;
要約すると、クエリには4秒かかります。
SELECT COUNT(*)
FROM orders
LEFT JOIN customers ON orders.customer_id = customers.customer_id
WHERE customer.state = 'PA';
上記に要約すると15milのレコードがあり、クエリには5秒かかります。
(SELECT COUNT(*)
FROM orders
WHERE order_date BETWEEN date1 AND date2)
UNION
(SELECT COUNT(*)
FROM orders
LEFT JOIN customers ON orders.customer_id=customers.customer_id
WHERE customer.state = 'PA');
上記に要約すると4500レコードがあり、クエリには2時間かかります。
もう少し妥当な時間内にカウントを得ることができる3番目のクエリには別の方法がありますか?好ましくは1分未満ですか?
あなたがテーブル定義を投稿してくださいすることができEXPLAINとしてaswell、(2列の代わりの2行はように、第2の1はそれを返します)出力? –
UNIONは重複を削除することに気付きます。両方が25の場合は、1つの行しか表示されません。 –
時間を忘れて、3番目のクエリが正しい結果を返していません。 –