sql >> データベース >  >> RDS >> Mysql

遅いMySQLクエリ

    クエリで2つの列を要求しているだけなので、インデックスはそこに移動できます/移動する必要があります:

    • DateTime
    • LoadTime

    クエリを高速化するもう1つの方法は、DateTimeフィールドを日付と時刻の2つに分割することです。
    このようにして、dbはDATE(...)を計算する代わりに日付フィールドに直接グループ化できます。

    編集済み:
    トリガーを使用する場合は、新しい列(DATE)を作成し、 newdateと呼びます。 、これを試してみてください(正しいかどうかを確認するために今は試すことができません):

    CREATE TRIGGER upd_check BEFORE INSERT ON SpeedMonitor
    FOR EACH ROW
    BEGIN
      SET NEW.newdate=DATE(NEW.DateTime);
    END
    

    再度編集:
    約900,000レコードで満たされた同じテーブルspeedmonitorを使用してdbを作成しました。
    次に、クエリS ELECT newdate、AVG(LoadTime)loadtime FROM speedmonitor GROUP BY newdate 約100秒かかりました!!
    newdateフィールドのインデックスを削除します(そして RESET QUERY CACHEを使用してキャッシュをクリアします およびFLUSHTABLES )、同じクエリに0.6秒かかりました!!!
    比較のために:クエリ SELECT DATE(DateTime)、AVG(LoadTime)loadtime FROM speedmonitor GROUP BY DATE(DateTime) 0.9秒かかりました。
    したがって、newdateのインデックスは適切ではないと思います。削除してください。
    できるだけ多くのレコードを追加して、2つのクエリを再度テストします。

    最終編集:
    newdate列とDateTime列のインデックスを削除し、8mlnレコードを使用します スピードモニターテーブルの結果は次のとおりです:

    • newdate列の選択とグループ化: 7.5s
    • DATE(DateTime)フィールドでの選択とグループ化: 13.7s

    良いスピードアップだと思います。
    mysqlコマンドプロンプト内でクエリを実行するのに時間がかかります。



    1. SQLSELECTでIF...THENを実行するにはどうすればよいですか?

    2. Railsアプリエラー-ActiveRecord::PendingMigrationError移行は保留中です。 'rake db:migrate RAILS_ENV =development'を実行して、この問題を解決します

    3. AmazonRDSマルチAZフェイルオーバーを処理するようにGlassFishJDBC接続プールを設定します

    4. PostgreSQL手続き型言語Cが見つかりません