Pohled funguje jako tabulka , ale není to stůl. Nikdy neexistuje; je to pouze připravený příkaz SQL, který se spustí, když odkazujete na název pohledu. IE:
CREATE VIEW foo AS
SELECT * FROM bar
SELECT * FROM foo
...je ekvivalentní běhu:
SELECT x.*
FROM (SELECT * FROM bar) x
MySQLDump nikdy nebude obsahovat řádky, které se mají vložit do pohledu...
To je bohužel podle (i když sporného) designu. Pro zobrazení MySQL existuje řada omezení, která jsou zdokumentována:http://dev.mysql.com/doc/refman/5.0/en/create-view.html
Pokud je to tedy pouze imaginární tabulka/připravený příkaz, znamená to, že má teoreticky stejný výkon (nebo dokonce nižší) jako normální tabulka/dotaz?
Ne.
Tabulka může mít přidružené indexy, což může urychlit načítání dat (za určitou cenu vložení/aktualizace). Některé databáze podporují „materializované“ pohledy, což jsou pohledy, na které lze použít indexy – což by nemělo být překvapením, že MySQL nepodporuje vzhledem k omezené funkčnosti zobrazení (která začala až ve verzi 5 IIRC, velmi pozdě do hry).
Vzhledem k tomu, že pohled je odvozená tabulka, výkon pohledu je pouze tak dobrý, jako je dobrý dotaz, na kterém je postaven. Pokud je tento dotaz na hovno, problém s výkonem bude jen sněhová koule... To znamená, že při dotazu na pohled - pokud odkaz na sloupec pohledu v klauzuli WHERE není zabalen do funkce (IE:WHERE v.column LIKE ...
, ne WHERE LOWER(t.column) LIKE ...
), může optimalizátor vložit kritéria (nazývaná predikát) do původního dotazu, čímž jej urychlí.