Sử dụng bảng information_schema.view
Điều này sẽ tạo ra GIẢI THÍCH cho tất cả các lượt xem
mysql -uroot -p -AN -e"select concat('explain ',view_definition) from information_schema.views" > /root/ExplainViews.sql
Điều này sẽ tạo ra GIẢI THÍCH cho tất cả các chế độ xem trong cơ sở dữ liệu mydb
mysql -uroot -p -AN -e"select concat('explain ',view_definition) from information_schema.views where table_schema = 'mydb'" > /root/ExplainViews.sql
Hãy thử một lần !!!
CẬP NHẬT 2012 / 03-22 11:30 EDT
@MattFenwick, câu trả lời của bạn đơn giản hơn tôi rất nhiều. Đây là một ví dụ tôi đã thử trên PC chạy MySQL 5.5.12. Tôi đã chạy EXPLAIN trên cả phiên bản CHỌN từ câu trả lời của bạn và EXPLAIN được tạo từ câu trả lời của tôi:
mysql> explain select * from bigjoin;
+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------------+
| 1 | SIMPLE | k | index | NULL | PRIMARY | 4 | NULL | 14 | Using index |
| 1 | SIMPLE | a | eq_ref | PRIMARY | PRIMARY | 4 | test.k.id_key | 1 | Using index |
| 1 | SIMPLE | b | ALL | NULL | NULL | NULL | NULL | 4 | |
+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------------+
3 rows in set (0.00 sec)
mysql> explain select `a`.`id_key` AS `id_key1`,`b`.`id_key` AS `id_key2` from ((`test`.`idlist` `k` left join `test`.`id_key_table` `a` on((`k`.`id_key` = `a`.`id_key`))) left join `test`.`new_keys_to_load` `b` on((`k`.`id_key` = `b`.`id_key`)));
+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------------+
| 1 | SIMPLE | k | index | NULL | PRIMARY | 4 | NULL | 14 | Using index |
| 1 | SIMPLE | a | eq_ref | PRIMARY | PRIMARY | 4 | test.k.id_key | 1 | Using index |
| 1 | SIMPLE | b | ALL | NULL | NULL | NULL | NULL | 4 | |
+----+-------------+-------+--------+---------------+---------+---------+---------------+------+-------------+
3 rows in set (0.00 sec)
mysql>
Cả hai đều sản xuất cùng một kế hoạch GIẢI THÍCH. Tôi sẽ thay đổi câu trả lời của tôi để thực hiện theo cách của bạn. Bạn nhận được +1 từ tôi mặc dù nó đơn giản là +2. Bạn nên đi trước và chấp nhận câu trả lời của riêng bạn về điều này.
Đây là một thông tin thú vị về VIEWs trong MySQL: Một khung nhìn được thể hiện ở hai nơi trong cơ sở dữ liệu information_schema
Điều này sẽ tạo ra GIẢI THÍCH cho tất cả các lượt xem
mysql -uroot -p -AN -e"select concat('explain select * from ',table_schema,'.',table_name,';') from information_schema.tables WHERE engine IS NULL" > /root/ExplainViews.sql
hoặc là
mysql -uroot -p -AN -e"select concat('explain select * from ',table_schema,'.',table_name,';') from information_schema.views" > /root/ExplainViews.sql
Điều này sẽ tạo ra GIẢI THÍCH cho tất cả các chế độ xem trong cơ sở dữ liệu mydb
mysql -uroot -p -AN -e"select concat('explain select * from ',table_schema,'.',table_name,';') from information_schema.tables WHERE table_schema='mydb' AND engine IS NULL;" > /root/ExplainViews.sql
hoặc là
mysql -uroot -p -AN -e"select concat('explain select * from ',table_schema,'.',table_name,';') from information_schema.views WHERE table_schema='mydb';" > /root/ExplainViews.sql