私が取り組んでいる Web ページでは、3 つのテーブルにあるさまざまなユーザーの詳細に基づいて統計を表示する必要があります。したがって、より多くの異なるテーブルに結合する次のクエリがあります。
SELECT *
FROM `user` `u`
LEFT JOIN `subscriptions` `s` ON `u`.`user_id` = `s`.`user_id`
LEFT JOIN `devices` `ud` ON `u`.`user_id` = `ud`.`user_id`
GROUP BY `u`.`user_id`
クエリを実行すると、約0.05LIMIT 1000
秒かかります。多くのクエリで 3 つのテーブルすべてのデータを使用しているため、次の中に配置することにしました。VIEW
CREATE VIEW `user_details` AS ( the same query from above )
そして今、私が実行すると:
SELECT * FROM user_details LIMIT 1000
約7〜10秒かかります。
だから私の質問は、ビューを最適化するために何かできることはありますか?
編集:これがEXPLAIN SELECT * FROM user_details
返されるものです
+----+-------------+------------+--------+----------------+----------------+---------+------------------------+--------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+------------+--------+----------------+----------------+---------+------------------------+--------+-------+
| 1 | PRIMARY | <derived2> | ALL | NULL | NULL | NULL | NULL | 322666 | |
| 2 | DERIVED | u | index | NULL | PRIMARY | 4 | NULL | 372587 | |
| 2 | DERIVED | s | eq_ref | PRIMARY | PRIMARY | 4 | db_users.u.user_id | 1 | |
| 2 | DERIVED | ud | ref | device_id_name | device_id_name | 4 | db_users.u.user_id | 1 | |
+----+-------------+------------+--------+----------------+----------------+---------+------------------------+--------+-------+
4 行セット (8.67 秒)
これはexplain
、クエリに対して返されるものです。
+----+-------------+-------+--------+----------------+----------------+---------+------------------------+--------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+----------------+----------------+---------+------------------------+--------+-------+
| 1 | SIMPLE | u | index | NULL | PRIMARY | 4 | NULL | 372587 | |
| 1 | SIMPLE | s | eq_ref | PRIMARY | PRIMARY | 4 | db_users.u.user_id | 1 | |
| 1 | SIMPLE | ud | ref | device_id_name | device_id_name | 4 | db_users.u.user_id | 1 | |
+----+-------------+-------+--------+----------------+----------------+---------+------------------------+--------+-------+
3 行セット (0.00 秒)