En visning fungerer som en tabel , men det er ikke et bord. Det eksisterer aldrig; det er kun en forberedt SQL-sætning, der køres, når du refererer til visningsnavnet. IE:
CREATE VIEW foo AS
SELECT * FROM bar
SELECT * FROM foo
... svarer til at køre:
SELECT x.*
FROM (SELECT * FROM bar) x
En MySQLDump vil aldrig indeholde rækker, der skal indsættes i en visning...
Det er desværre af (omend tvivlsomt) design. Der er adskillige begrænsninger for MySQL-visninger, som er dokumenteret:http://dev.mysql.com/doc/refman/5.0/en/create-view.html
Så hvis det kun er en imaginær tabel/forberedt sætning, betyder det så, at den teoretisk har den samme ydeevne (eller endnu mindre) som en normal tabel/forespørgsel?
Nej.
En tabel kan have indekser tilknyttet, hvilket kan gøre datahentning hurtigere (mod en vis pris for indsættelse/opdatering). Nogle databaser understøtter "materialiserede" visninger, som er visninger, der kan have indekser anvendt på dem - hvilket ikke burde være en overraskelse, at MySQL ikke understøtter givet den begrænsede visningsfunktionalitet (som først begyndte i v5 IIRC, meget sent i spillet).
Fordi en visning er en afledt tabel, er visningens ydeevne kun så god som den forespørgsel, den er bygget på. Hvis den forespørgsel stinker, vil ydeevneproblemet bare snebold... Når det er sagt, når der forespørges på en visning - hvis en visningskolonnereference i WHERE-sætningen ikke er pakket ind i en funktion (Dvs.:WHERE v.column LIKE ...
, ikke WHERE LOWER(t.column) LIKE ...
), kan optimeringsværktøjet skubbe kriterierne (kaldet et prædikat) til den oprindelige forespørgsel - hvilket gør det hurtigere.