Что-то не так с вложенными представлениями в MySQL? - PullRequest
0 голосов
/ 02 декабря 2011

Что плохого в том, что один вид ссылается на другой? Например, скажем, у меня есть таблица пользователей

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`)
);

Тогда, ради аргумента, представление, которое просто показывает всем пользователям

CREATE VIEW all_users AS SELECT * FROM users

И затем представление, которое просто возвращает их first_name и last_name

CREATE VIEW full_names AS SELECT first_name, last_name FROM all_users

Есть ли проблемы с производительностью при базировании одного взгляда на другое? Давайте также притворимся, что это самый простой из примеров, и сценарий реального мира был бы гораздо более сложным, но с той же общей концепцией, основанной на одном представлении другого взгляда.

Ответы [ 2 ]

3 голосов
/ 03 декабря 2011

Это зависит от используемого АЛГОРИТМА . TEMPTABLE может быть довольно дорогим, в то время как MERGE должен быть таким же, как использование таблицы напрямую, поэтому без потерь.

1 голос
/ 03 декабря 2011

А для твоего примера тоже самое:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...