用户收藏内容读取通常涉及多个表关联查询,如用户表、收藏关系表、内容表等。当数据量大时,简单的联表查询可能导致性能问题。
-- 用户表
CREATE TABLE users (
user_id INT PRIMARY KEY,
username VARCHAR(50),
-- 其他用户字段
);
-- 内容表
CREATE TABLE contents (
content_id INT PRIMARY KEY,
title VARCHAR(100),
-- 其他内容字段
);
-- 收藏表 (添加适当索引)
CREATE TABLE favorites (
favorite_id INT PRIMARY KEY,
user_id INT,
content_id INT,
created_at TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(user_id),
FOREIGN KEY (content_id) REFERENCES contents(content_id),
INDEX idx_user (user_id),
INDEX idx_content (content_id),
INDEX idx_user_content (user_id, content_id)
);
SELECT
c.content_id,
c.title,
-- 其他需要的内容字段
f.created_at AS favorite_time
FROM
favorites f
JOIN
contents c ON f.content_id = c.content_id
WHERE
f.user_id = 123 -- 指定用户ID
ORDER BY
f.created_at DESC
LIMIT 20 OFFSET 0; -- 分页处理
SELECT
c.content_id,
c.title,
-- 其他需要的内容字段
f.created_at AS favorite_time
FROM
contents c
JOIN
(SELECT content_id, created_at
FROM favorites
WHERE user_id = 123
ORDER BY created_at DESC
LIMIT 20 OFFSET 0) f
ON
c.content_id = f.content_id;
分页优化:
示例:
-- 第一页
SELECT ... WHERE user_id = 123 AND created_at < NOW() ORDER BY created_at DESC LIMIT 20;
-- 下一页 (使用上一页最后一条记录的created_at)
SELECT ... WHERE user_id = 123 AND created_at < '上一页最后时间' ORDER BY created_at DESC LIMIT 20;
缓存策略:
读写分离:
数据冗余:
实施优化后应进行以下测试: - 单用户大量收藏时的查询性能 - 高并发下的查询响应时间 - 分页查询在不同页码的性能表现
通过以上优化措施,可以显著提高用户收藏内容读取的性能和响应速度。