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

MySQLでの行カウントの高速化

    だから問題は

    この種のクエリを高速化するためのテクニックはありますか?

    まあ、そうではありません。列ベースのストレージエンジンは、これらのSELECT COUNT(*)クエリを使用するとおそらく高速になりますが、他のほとんどのクエリではパフォーマンスが低下します。

    最善の策は、トリガーを介して要約テーブルを維持することです。オーバーヘッドはそれほど多くなく、テーブルがいくら大きくてもSELECT部分​​は瞬時に実行されます。ボイラープレートコードは次のとおりです。

    DELIMITER //
    
    CREATE TRIGGER ai_books AFTER INSERT ON books
    FOR EACH ROW UPDATE books_cnt SET total = total + 1 WHERE status = NEW.status
    //
    CREATE TRIGGER ad_books AFTER DELETE ON books
    FOR EACH ROW UPDATE books_cnt SET total = total - 1 WHERE status = OLD.status;
    //
    CREATE TRIGGER au_books AFTER UPDATE ON books
    FOR EACH ROW
    BEGIN
        IF (OLD.status <> NEW.status)
        THEN
            UPDATE books_cnt SET total = total + IF(status = NEW.status, 1, -1) WHERE status IN (OLD.status, NEW.status);
        END IF;
    END
    //
    


    1. 警告:mysql_connect():[2002]そのようなファイルまたはディレクトリはありません(unix:///tmp/mysql.sock経由で接続しようとしています)

    2. 単純なパラメータ化と簡単な計画—パート2

    3. SQL Azureデータベースをローカル開発サーバーにコピーするにはどうすればよいですか?

    4. Entity Frameworkを使用して、読み取り時にテーブルをロックするにはどうすればよいですか?