Utilizzare la tabella information_schema.views
Questo genererà EXPLAIN per tutte le viste
mysql -uroot -p -AN -e"select concat('explain ',view_definition) from information_schema.views" > /root/ExplainViews.sql
Questo genererà EXPLAIN per tutte le viste nel database mydb
mysql -uroot -p -AN -e"select concat('explain ',view_definition) from information_schema.views where table_schema = 'mydb'" > /root/ExplainViews.sql
Provaci !!!
AGGIORNAMENTO 2012-03-22 11:30 EDT
@MattFenwick, la tua risposta è molto più semplice della mia. Ecco un esempio che ho provato sul mio PC con MySQL 5.5.12. Ho eseguito EXPLAIN sia sulla versione SELECT della tua risposta sia su EXPLAIN generato dalla mia risposta:
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>
Entrambi hanno prodotto lo stesso piano EXPLAIN. Cambierò la mia risposta per implementare la tua strada. Ricevi un +1 da me, sebbene sia +2 per semplicità. Dovresti andare avanti e accettare la tua risposta su questo.
Ecco un interessante aspetto delle VISTE in MySQL: Una vista è rappresentata in due punti nel database information_schema
Questo genererà EXPLAIN per tutte le viste
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
o
mysql -uroot -p -AN -e"select concat('explain select * from ',table_schema,'.',table_name,';') from information_schema.views" > /root/ExplainViews.sql
Questo genererà EXPLAIN per tutte le viste nel 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
o
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