Tôi không thấy lý do chính đáng, tại sao bạn sử dụng JSON ở đây. Nó cũng không rõ ràng, tại sao bạn tin rằng một " giản đồ nosql "trong MySQL sẽ làm mọi thứ tốt hơn.
Những gì bạn có thể cần là một cái gì đó như thế này:
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)
);
Điều này sẽ đơn giản hóa các truy vấn của bạn. Câu lệnh INSERT sẽ giống như sau:
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);
Câu lệnh SELECT có thể giống như thế này
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;
Lưu ý rằng tôi đã không cố gắng tối ưu hóa bảng / lược đồ cho kích thước và hiệu suất dữ liệu. Đó sẽ là một câu hỏi khác. Nhưng bạn phải thấy rằng các truy vấn bây giờ đơn giản hơn nhiều.