は私がはEXPLAINでより少ない行を持っていますが、明示的なより遅いが
SELECT `publisher_id`, `publisher_name`, SUM(`views`) AS `total_views`, SUM(`channels`) AS `total_channels`
FROM (
SELECT DISTINCT `name` AS `publisher_name`, `id` AS `publisher_id`
FROM `publishers`
WHERE TRIM(`name`) <> ''
) AS `publisher_names`
INNER JOIN
(
SELECT `twitch_name`, `publishers`
FROM `game_profiles`
WHERE `twitch_name` IS NOT NULL
AND `publishers` IS NOT NULL
AND TRIM(`publishers`) <> ''
) AS `game_list`
ON `game_list`.`publishers` LIKE CONCAT('%', `publisher_names`.`publisher_name`, '%')
INNER JOIN
(
SELECT `games`.`id` AS `id`, `games`.`name`, `games`.`simple_name`, `games`.`box`, SUM(`channels`) AS `channels`, SUM(`viewers`) AS `views`
FROM `games`
WHERE `log_date` >= SUBDATE(NOW(), INTERVAL 1 WEEK)
AND `log_date` <= SUBDATE(NOW(), INTERVAL 0 WEEK)
GROUP BY `games`.`id`
) AS `view_list`
ON `game_list`.`twitch_name` = `view_list`.`name`
GROUP BY `publisher_id` ORDER BY `total_views` DESC LIMIT 10;
と、クエリのパフォーマンスを確認する以下のクエリを最適化しようとして登録しよう EXPLAINコマンドを実行し、私は次のような結果を得ます。
基本的にゲームテーブル、ビュー、および時間単位のチャンネル数が含まれ、game_profilesの表は、そのpubliisher(複数可)に、ゲームをマップし、出版テーブルは含まれてい既存の各出版社のより詳細な行私が達成しようとしているのは、過去1週間のゲームの総視聴回数に基づいてトップ10のパブリッシャーを表示することです。
アイデアがなくなり、暗黙的なJOINを使用しようとしました。クエリは私にが EXPLAINコマンドをため次のような結果になります
SELECT `publishers`.`id` AS `publisher_id`, `publishers`.`name` AS `publisher_name`,
SUM(`games`.`viewers`) AS `total_views`, SUM(`games`.`channels`) AS `total_channels`
FROM `game_profiles`, `publishers`, `games`
WHERE `game_profiles`.`twitch_name` IS NOT NULL
AND `game_profiles`.`publishers` IS NOT NULL AND TRIM(`game_profiles`.`publishers`) <> ''
AND `game_profiles`.`publishers` LIKE CONCAT('%', `publishers`.`name`, '%')
AND `game_profiles`.`twitch_name` = `games`.`name`
AND `games`.`log_date` >= SUBDATE(NOW(), INTERVAL 1 WEEK)
AND `games`.`log_date` <= SUBDATE(NOW(), INTERVAL 0 WEEK)
GROUP BY `publisher_id` ORDER BY `total_views` DESC LIMIT 10;
の下に書かれています。私が理解から
、これは同じ結果を返すべきであるが、クエリは、MySQLのワークベンチでゆっくりと実行している私は、私はそれが実際に返すことを確認することはできませんその結果を待つことができません同じ行。しかし、EXPLAINの結果から判断すると、後者のクエリはより速く実行されるはずです。なぜこれが当てはまらないのか私がここで紛失しているものがありますか?どうもありがとうございました。
P.S.私のデータベース設計は本当に最適ではありません。これは、プロトタイプデータベースのほうが多いです。これが行われたとき、正規化は行われなかった。私は、私の質問で何が起きているのかをよりよく理解したい。ありがとうございました。
あなたが書かれているSQLコードを...適切従ってくださいあなたの質問を更新してください –
編集のおかげで@AnkitAgrawal – iron59