视图的数据存放在哪里_分布式 | DBLE 是如何实现视图的?
生活随笔
收集整理的這篇文章主要介紹了
视图的数据存放在哪里_分布式 | DBLE 是如何实现视图的?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
作者:蘇仕祥
浩鯨科技 PaaS 組件團隊成員,長期從事分庫分表中間件的相關解決方案工作,熱愛技術,樂于分享。
本文來源:原創投稿
*愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯系小編并注明來源。
本文主要講解 DBLE 是如何實現 MySQL 視圖功能的,內容包括 MySQL 視圖相關概念、MySQL 對視圖的實現,以及 DBLE 對視圖的實現。一、MySQL 視圖概念及 MySQL 中視圖的實現MySQL 5.0 版本開始引入視圖。視圖本身是一個虛擬表,不存放任何數據。在使用 SQL 語句訪問視圖的時候,它返回的數據是 MySQL 從其他表中生成的。
MySQL 中對于視圖是如何實現的呢?
MySQL 中通過兩種算法來實現視圖功能,分別稱為合并算法(MERGE)和臨時表算法(TEMPTABLE)。如下圖所示(圖片出自《高性能 MySQL》):合并算法就是將視圖 SQL 和查詢 SQL 合并,然后執行查詢,可以看到如果我們通過視圖來簡化 SQL,其實在 MySQL 底層又給我們轉換了過來。臨時表算法就是在執行查詢的時候,定義的視圖會先生成對應的臨時表,然后服務器基于該臨時表執行相應的查詢。那么 MySQL 究竟會使用哪種算法呢?
如果在創建視圖時沒有顯示指定算法,MySQL 會盡可能的使用合并算法。如果視圖中包含 GROUP BY、DISTINCT、任何聚合函數、UNION、子查詢等,只要無法在原表記錄和視圖記錄中建立一一映射的場景中,MySQL 都會使用臨時表算法來實現視圖(當然這些規則可能隨著 MySQL 的版本更新發生變化)。想要確定 MySQL 究竟使用何種算法,可以 EXPLAIN 一條針對視圖的簡單查詢,如果 select_type為"DERIVED",則為臨時表算法。二、DBEL 對視圖的實現DBLE 對視圖的實現主要分為兩種情況,一種是可下推,另一種為不可下推。可下推:DBLE 直接將視圖相關 SQL 下推到后端 MySQL 執行,DBLE 端只保存視圖相應元數據信息。
不可下推:DBLE 會在邏輯層面實現視圖,然后當執行視圖相應查詢 SQL 的時候,在將相應查詢 SQL 與視圖 SQL 合并后執行,這里就相當于 MySQL 中的合并算法了。
那么可下推或不可下推的情況是如何判斷的呢?
通過判斷相應的邏輯 schema 是不是 nosharding(nosharding 表示 schema 中沒有表配置)。如果是 nosharding 則可下推,否則不可下推。其實這里可以看出來,可下推的情況可能比較少出現。DBLE 對視圖的實現詳情如下圖所示:總結本文主要講解了 DBLE 是如何實現 MySQL 視圖的,內容包括 MySQL 視圖相關概念、MySQL 對視圖的實現,以及 DBLE 對視圖的實現,希望對大家理解 DBLE 的視圖實現有所幫助。社區近期動態
?點一下“閱讀原文”了解更多資訊
總結
以上是生活随笔為你收集整理的视图的数据存放在哪里_分布式 | DBLE 是如何实现视图的?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 计时_Python tim
- 下一篇: java替换特殊字符_Java Stri