こんにちは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 に配置することを強制する ... 通常の結果を得るには、実際のデータと構造の更新にとって不便になります。
このシナリオでのベスト プラクティスは何ですか?
また、テーブルが大きくなった場合の速度最適化の最適なシナリオは何ですか?