Gunakan tabel information_schema.views
Ini akan menghasilkan EXPLAIN untuk semua tampilan
mysql -uroot -p -AN -e"select concat('explain ',view_definition) from information_schema.views" > /root/ExplainViews.sql
Ini akan menghasilkan EXPLAIN untuk semua tampilan di database mydb
mysql -uroot -p -AN -e"select concat('explain ',view_definition) from information_schema.views where table_schema = 'mydb'" > /root/ExplainViews.sql
Cobalah !!!
UPDATE 2012-03-22 11:30 EDT
@ MattFenwick, jawaban Anda jauh lebih sederhana daripada saya. Berikut adalah contoh yang saya coba pada PC saya yang menjalankan MySQL 5.5.12. Saya menjalankan EXPLAIN pada versi SELECT dari jawaban Anda dan EXPLAIN yang dihasilkan dari jawaban saya:
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>
Mereka berdua menghasilkan rencana JELASKAN yang sama. Saya akan mengubah jawaban saya untuk menerapkan cara Anda. Anda mendapatkan +1 dari saya meskipun itu +2 untuk kesederhanaan. Anda harus melanjutkan dan menerima jawaban Anda sendiri untuk yang satu ini.
Berikut ini adalah fakta menarik tentang TAMPILAN di MySQL: Tampilan diwakili di dua tempat di database information_schema
Ini akan menghasilkan EXPLAIN untuk semua tampilan
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
atau
mysql -uroot -p -AN -e"select concat('explain select * from ',table_schema,'.',table_name,';') from information_schema.views" > /root/ExplainViews.sql
Ini akan menghasilkan EXPLAIN untuk semua tampilan di database 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
atau
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