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

Mysqljsonベースのトレンドタグの実装

    ここでJSONを使用する理由はわかりません。また、「nosqlスキーマ」と信じる理由も明確ではありません。 「MySQL内ではもっとうまくいくでしょう。

    おそらく必要なのは次のようなものです:

    CREATE TABLE TAG_COUNTER (
        account       varchar(36) NOT NULL,
        time_id       INT NOT NULL,
        tag_name      varchar(50) NOT NULL,
        counter       INT UNSIGNED NOT NULL,
        PRIMARY KEY   (account, time_id, tag_name)
    );
    

    これにより、クエリが簡素化されます。 INSERTステートメントは次のようになります。

    INSERT INTO TAG_COUNTER
      (account, time_id, tag_name, counter)
    VALUES
      ('google', 2018061023, 'tag1', 1),
      ('google', 2018061023, 'tag2', 1)
    ON DUPLICATE KEY UPDATE counter = counter + VALUES(counter);
    

    SELECTステートメントは次のようになります

    SELECT
        SUBSTRING(time_id, 1, 6) AS month,
        tag_name,
        SUM(counter) AS counter_agg
    FROM TAG_COUNTER
    GROUP BY month, tag_name
    ORDER BY month, counter_agg DESC;
    

    データサイズとパフォーマンスのためにテーブル/スキーマを最適化しようとしなかったことに注意してください。それは別の質問になります。ただし、クエリがはるかに簡単になったことを確認する必要があります。



    1. SQLServerの日付から短い月の名前を取得する5つの方法

    2. mysqlのUTCでの日付

    3. SQLServerタイムアウト例外をキャッチする方法

    4. PHPでmysql_fetch_arrayをループする