你好有users
表,与另一个表多对多相关。
CREATE TABLE users (
id INT NOT NULL PRIMARY KEY,
name varchar(50)
);
;
CREATE TABLE items (
id INT NOT NULL PRIMARY KEY,
name varchar(50)
);
CREATE TABLE user_items (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
user_id int NOT NULL,
item_id int NOT NULL,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (item_id) REFERENCES items(id)
)
显示用户信息+计数(相关项目)的最佳方式是什么?我尝试了 2 个查询 .. 但它们都有一些缺点:
SELECT u.*,
(SELECT count(id) FROM user_items WHERE user_id = u.id) as items_count
FROM users u;
SELECT u.*,
COUNT(ui.id) as items_count
FROM users u
JOIN user_items ui ON ui.user_id = u.id
GROUP BY u.id, u.name;
当这个表变大时,子选择查询..会变得很重..(它们会)。
分组查询 .. 强制我将所有用户字段放在 GROUP BY ... 中以获得正常结果,这对于真实数据和结构更新来说变得不方便。
在这种情况下,最佳做法是什么?
如果表变大,速度优化的最佳方案是什么?