MySQL中的視圖是物化視圖,也就是說(shuō),它們是存儲(chǔ)在磁盤(pán)上的查詢(xún)結(jié)果集,而不是簡(jiǎn)單的查詢(xún)定義。這一點(diǎn)與其他數(shù)據(jù)庫(kù)系統(tǒng)中的視圖有所不同。
CREATE VIEW myview AS SELECT col1, col2, col3 FROM mytable WHERE col1 >10;
當(dāng)創(chuàng)建一個(gè)視圖時(shí),MySQL會(huì)執(zhí)行查詢(xún)并將結(jié)果存儲(chǔ)在磁盤(pán)上。每當(dāng)查詢(xún)視圖時(shí),MySQL都會(huì)將結(jié)果從磁盤(pán)讀取到內(nèi)存中,并將其視為虛擬表。這意味著視圖的使用與普通的表一樣方便,但速度可能比實(shí)際的表慢。
盡管視圖是物化的,但它們并不是靜態(tài)的。當(dāng)與定義它們的原始表交互時(shí),視圖會(huì)自動(dòng)更新。
UPDATE mytable SET col1 = 20 WHERE col2 = 'foo';
如果視圖中的查詢(xún)引用了mytable表,那么該表的更改將反映在視圖中。因此,查詢(xún)myview將返回col1>20的所有行(而不是>10)。
需要注意,對(duì)于大型數(shù)據(jù)集,物化的視圖可能會(huì)使用大量磁盤(pán)空間。因此,在使用視圖之前,請(qǐng)確保這樣做是有必要的,只創(chuàng)建必要的視圖。此外,視圖的性能也取決于物理磁盤(pán)的速度。因此,它們可能不適合需要快速數(shù)據(jù)訪問(wèn)的應(yīng)用程序。