2016-11-02 16 views
0

私のクエリは約10秒間実行されており、それは受け入れられません。大規模なテーブルの中のMySQLクエリの日付

私はこのスピードを改善する方法を模索していますが、私はオプションがありません。 今から30日間のレコードを1,200万行以上のテーブルに戻す必要があります。私も試してみました

SELECT DATE(DATE) AS FDATE, 
     SUM(VIEW_COUNT) AS COUNT, 
     COUNT(IP_ADDRESS) AS CLIENTS 
FROM VIEWS 
WHERE USERID = 'test' 
    AND DATE BETWEEN ADDDATE(CURDATE(), INTERVAL -30 DAY) AND CURDATE() 
GROUP BY FDATE DESC 

が、同じ効果:

次のクエリあなたは、クエリの実行時間を短縮でパフォーマンスを向上させるためのMySQLのインデックスを使用して試みることができる

SELECT DATE(DATE) AS FDATE, 
     SUM(VIEW_COUNT) AS COUNT, 
     COUNT(IP_ADDRESS) AS CLIENTS 
FROM VIEWS 
WHERE USERID = 'test' 
    AND DATE >= (DATE(NOW() - INTERVAL 30 DAY) + INTERVAL 0 SECOND) 
GROUP BY FDATE DESC 
+0

(userid、date)にはカバーインデックスがありますか? – Strawberry

答えて

1
+0

"インデックスがないと、MySQLは最初の行から始めて、関連する行を見つけるためにテーブル全体を読み取る必要があります。テーブルが大きいほど、このコストは高くなります。すべてのデータを見る必要なしに、データファイルの途中でシークする位置を迅速に判断することができます。 –

+0

インデックスはどこで使用することをお勧めしますか?これは他のテーブルを参照しないスタンドアロンのテーブルなので、PRIMARY KEYはID – Jordy

+0

に設定されています。上のテキストからわかるように、クエリでは1,200万行のすべての行が読み込まれ、インデックスでは日付とあなたがはるかに速くフィルタリングされたユーザーID。 –

関連する問題