全面學習MySQL中的檢視(3) 指定檢視處理方式
1.3 指定檢視處理方式
MySQL資料庫的CREATE/ALTER VIEW語句中的ALGORITHM子句是對標準SQL語句所做的擴充套件。它的功能是確定MySQL如何處理檢視。
一般ALGORITHM有三個值:MERGE、TEMPTABLE或UNDEFINCED,預設值是UNDEFINED(當沒有指定ALGORITHM子句時)。
- MERGE:將查詢檢視的語句與檢視的定義語句合併處理。
- TEMPTABLE:檢視查詢的結果儲存到臨時表,而後在該臨時表基礎上執行查詢檢視的語句;
- UNDEFINED:由MySQL選擇使用哪種演算法,一般會首選MERGE,因為MERGE更有效率,而且TEMPTABLE不支援更新。
這些概念聽起來都比較抽象,對於生在新中國長在紅旗下普遍善良單純無條件依附強權的無數蟻族來說,可能理解起來非常困難,其實用不著太過自卑,你這不是笨,你只是單純。
下面結合例子來說明白,希望能夠幫助理解。先來說說MERGE的情況,例如有一個名為v_merge的檢視有下列的定義:
- CREATE ALGORITHM = MERGE VIEW v_merge (vc1, vc2) AS SELECT c1, c2 FROM t WHERE c3 > 100;
那麼當有查詢時,它是怎麼個合併處理法呢,首先說當執行下列查詢時:
- SELECT * FROM V_MERGE;
MySQL在處理時按照下列的邏輯:
- v_merge對映為t;
- *對映成vc1,vc2,實際上是t表的c1,c2;
- 而後增加where語句。
那麼實際執行的語句就是:
- SELECT c1,c2 FROM t where c3>100;
如果執行下列語句的話:
- SELECT * FROM V_MERGE WHERE vc1<100;
對於這個語句,WHERE之前的處理邏輯與前面的示例是相同的,最後再附加上檢視的where語句,就變成了:
- SELECT c1,c2 FROM t where c3>100 and c1<100
按照官方文件上的說法,實際上組合WHERE語句時是遵照這樣的格式:
- WHERE (select WHERE) AND (view WHERE)
不知道大家理解清楚了沒有,接下來再看看TEMPTABLE的方式,這個就簡單了,我感覺可以將其理解成類似ORACLE物化檢視的概念,但在MySQL中它是個臨時的物化檢視,怎麼個臨時法呢,就是說物化只存在於查詢那一刻---將檢視的定義SQL生成實體臨時表,對於檢視的查詢條件會在臨時表上進行,包括傳統的WHERE子句,以及像MERGE方式無法支援的DISTINCT、GROUP BY、HAVING等。
TEMPTABLE方式的一個特點--不可更新,也與其臨時的實現特性有關。
那麼,我們知道了MERGE方式的話無法支援像聚合查詢、分組統計等應用,而TEMPTABLE方式的話又non-updatable,我們可能有時候無法確定檢視究竟會怎麼用,那就可以選擇標準的UNDEFINED方式,也是預設的方式,由MySQL自己視情況確定了。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-707022/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL之檢視學習MySql
- MySQL全面瓦解15:檢視MySql
- mysql binlog檢視指定資料庫MySql資料庫
- 處理專案檢視中的選擇
- odoo檢視入門學習- tree檢視的使用Odoo
- MYSQL 檢視MySql
- 11 UML中的邏輯檢視、程序檢視、實現檢視、部署檢視
- 管理mysql的檢視MySql
- MySQL View 檢視MySqlView
- MySQL檢視版本號的五種方式介紹MySql
- Linux 磁碟 使用率 檢視 處理Linux
- 深入學習和理解Django檢視層:處理請求與響應Django
- Django - 檢視層 - 檢視函式及快捷方式Django函式
- Echarts檢視視覺化-學習筆記(努力更新中)Echarts視覺化筆記
- Git檢視指定commit資訊GitMIT
- ASP.NET Core 5.0 MVC中的檢視分類——佈局檢視、啟動檢視、具體檢視、分部檢視ASP.NETMVC
- MySQL檢視介紹MySql
- MySQL 檢視簡介MySql
- 10_MySQL檢視MySql
- MySQL Case-information_schema檢視查詢慢處理一例MySqlORM
- iOS 實現檢視指定圓角iOS
- 檢視MySQL鎖等待的原因MySql
- Flutter學習之檢視體系Flutter
- ClickHouse 物化檢視學習總結
- git檢視指定提交檔案的內容Git
- 檢視Ubuntu上佔用指定埠的程序Ubuntu
- MySQL 查詢的成本的檢視MySql
- MySQL入門系列:檢視MySql
- mysql建立索引和檢視MySql索引
- MySql 什麼是檢視MySql
- MySQL筆記 13 檢視MySql筆記
- 【MySQL】檢視&子查詢MySql
- Mac小技巧 快速檢視指定應用程式的所有視窗Mac
- 11、Oracle中的檢視Oracle
- [Django REST framework - 檢視元件之檢視基類、檢視擴充套件類、檢視子類、檢視集]DjangoRESTFramework元件套件
- 檢視mysql版本的六種方法MySql
- 【學習】SQL基礎-015-檢視SQL
- Git檢視指定檔案的sha-1值Git
- 【Tensorflow_DL_Note3】深度學習中的資料處理及其視覺化深度學習視覺化