我有一个 API,我需要记录查询中返回的表中的哪些 id,并在另一个查询中,返回基于 id 日志排序的结果。
例如:
表products
有一个称为PKid
的users
PK 称为id
。我可以创建一个日志表,每个返回的 id 都有一个插入/更新。我想知道它的性能和设计。
本质上,对于 API 中返回的每个 ID,我会:
INSERT INTO log (product_id, user_id, counter)
VALUES (@the_product_id, @the_user_id, 1)
ON DUPLICATE KEY UPDATE counter=counter+1;
..我要么有一个 id 列作为 PK,要么是 product_id 和 user_id 的组合(替代。将这两者作为唯一索引)。
所以第一个问题是它的性能(20 次插入/更新以及对 API 中我的选择调用的影响) - 是否有更好/更智能的方法来记录这些 ID?从网络服务器日志中提取?
其次是包含记录数据的选择语句的性能,以允许用户在每个请求中查看新产品(一个简化的示例,我会指定表字段而不是 * 在现实生活中):
SELECT p.*, IFNULL(
SELECT log.counter
FROM log
WHERE log.product_id = p.id
AND log.user_id = @the_user_id
, 0 ) AS seen_by_user
FROM products AS p
ORDER BY seen_by_user ASC
在我们的数据库中,products 表有数百万行,users 表增长很快。我这样做的想法是对的,还是有更好的方法?如何优化流程,是否有可以使用的工具?