sql >> Databáze >  >> RDS >> Mysql

Implementace trendových značek na bázi Mysql json

Nevidím dobrý důvod, proč zde používáte JSON. Není také jasné, proč se domníváte, že „schéma nosql " v MySQL by udělal něco lepšího.

Pravděpodobně budete potřebovat něco takového:

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)
);

To zjednoduší vaše dotazy. Příkaz INSERT by vypadal takto:

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);

Příkaz SELECT může být něco takového

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;

Všimněte si, že jsem se nepokoušel optimalizovat tabulku/schéma pro velikost dat a výkon. To by byla jiná otázka. Ale musíte vidět, že dotazy jsou nyní mnohem jednodušší.



  1. Jak omezit dotaz SHOW TABLES

  2. SQL Server:ekvivalent kaskády drop tabulky?

  3. Je řetězcový operátor „+“ tak jednoduchý?

  4. Používání úložiště Intel Optane pro SQL Server