¿Hay algún problema con las vistas anidadas en MySQL?

¿Hay algo de malo en tener una vista de reference en otra vista? Por ejemplo, supongamos que tengo una tabla de usuarios

CREATE TABLE `users` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `first_name` varchar(255) NOT NULL, `last_name` varchar(255) NOT NULL, PRIMARY KEY (`id`) ); 

Luego, por el bien del argumento, una vista que solo muestra a todos los usuarios

 CREATE VIEW all_users AS SELECT * FROM users 

Y luego una vista que simplemente devuelve su primer nombre y apellido

 CREATE VIEW full_names AS SELECT first_name, last_name FROM all_users 

¿Hay algún problema de performance al basar una vista en otra? También imaginemos que este es el más simple de los ejemplos y un escenario del mundo real sería mucho más complejo, pero el mismo concepto general de basar una vista de otra vista.

Depende del ALGORITMO utilizado. TEMPTABLE puede ser bastante caro, mientras que MERGE debería ser lo mismo que usar la tabla directamente para que no haya pérdidas allí.

Y para su ejemplo es el mismo:

 mysql> explain select * from users; +----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+ | 1 | SIMPLE | users | system | NULL | NULL | NULL | NULL | 0 | const row not found | +----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+ 1 row in set (0.01 sec) mysql> explain select * from all_users; +----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+ | 1 | SIMPLE | users | system | NULL | NULL | NULL | NULL | 0 | const row not found | +----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+ 1 row in set (0.00 sec) mysql> explain select * from full_names ; +----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+ | 1 | SIMPLE | users | system | NULL | NULL | NULL | NULL | 0 | const row not found | +----+-------------+-------+--------+---------------+------+---------+------+------+---------------------+ 1 row in set (0.02 sec)