oracle和mysql文件怎么打开_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明-sql文件怎么打开...
概述
之前分享的主要是Oracle上的一些內容,那么mysql又有哪些地方不一樣呢?下面從MySQL總體架構、sql查詢執行流程和語句執行順序來看一下。。
01
架構總覽
下面看一下mysql的架構圖:
mysql架構
從上圖中我們可以看到,整個架構分為兩層,上層是MySQLD的被稱為的‘SQL Layer’,下層是各種各樣對上提供接口的存儲引擎,被稱為‘Storage Engine Layer’。其它各個模塊和組件,從名字上就可以簡單了解到它們的作用,這里就不多做介紹了。
再看一下Oracle的架構:
Oracle系統體系結構由三部分組成:邏輯結構、物理結構和實例。
02
查詢執行流程
理解sql查詢執行的流程對優化是很重要的,下面介紹下mysql的查詢執行流程:
1.連接1.1客戶端發起一條Query請求,監聽客戶端的‘連接管理模塊’接收請求
1.2將請求轉發到‘連接進/線程模塊’
1.3調用‘用戶模塊’來進行授權檢查
1.4通過檢查后,‘連接進/線程模塊’從‘線程連接池’中取出空閑的被緩存的連接線程和客戶端請求對接,如果失敗則創建一個新的連接請求
2.處理2.1先查詢緩存,檢查Query語句是否完全匹配,接著再檢查是否具有權限,都成功則直接取數據返回
2.2上一步有失敗則轉交給‘命令解析器’,經過詞法分析,語法分析后生成解析樹
2.3接下來是預處理階段,處理解析器無法解決的語義,檢查權限等,生成新的解析樹
2.4再轉交給對應的模塊處理
2.5如果是SELECT查詢還會經由‘查詢優化器’做大量的優化,生成執行計劃
2.6模塊收到請求后,通過‘訪問控制模塊’檢查所連接的用戶是否有訪問目標表和目標字段的權限
2.7有則調用‘表管理模塊’,先是查看table cache中是否存在,有則直接對應的表和獲取鎖,否則重新打開表文件
2.8根據表的meta數據,獲取表的存儲引擎類型等信息,通過接口調用對應的存儲引擎處理
2.9上述過程中產生數據變化的時候,若打開日志功能,則會記錄到相應二進制日志文件中
3.結果3.1Query請求完成后,將結果集返回給‘連接進/線程模塊’
3.2返回的也可以是相應的狀態標識,如成功或失敗等
3.3‘連接進/線程模塊’進行后續的清理工作,并繼續等待請求或斷開與客戶端的連接
最后一圖做小總結:
mysql查詢執行流程
在看一下Oracle的sql查詢執行流程:
1、當一用戶第一次提交一個SQL表達式時,Oracle會將這SQL進行Hard parse,這過程有點像程序編譯,檢查語法、表名、字段名等相關信息(如下圖),這過程會花比較長的時間,因為它要分析語句的語法與語義。然后獲得最優化后的執行計劃(sql plan),并在內存中分配一定的空間保存該語句與對應的執行計劃等信息。
2、當用戶第二次請求或多次請求時,Oracle會自動找到先前的語句與執行計劃,而不會進行Hard parse,而是直接進行Soft parse(把語句對應的執行計劃調出,然后執行),從而減少數據庫的分析時間。
注意的是:Oracle中只能完全相同的語句,包大小寫、空格、換行都要求一樣時,才會重復使用以前的分析結果與執行計劃。
03
SQL解析順序
這一塊Oracle和mysql都是一樣的,所以就不區別開了。看一個實例:SELECT DISTINCT
< select_list >
FROM
< left_table > < join_type >
JOIN < right_table > ON < join_condition >
WHERE
< where_condition >
GROUP BY
< group_by_list >
HAVING
< having_condition >
ORDER BY
< order_by_condition >
LIMIT < limit_number >
執行順序是這樣的1 FROM
2 ON
3 JOIN
4 WHERE
5 GROUP BY
6 HAVING
7 SELECT
8 DISTINCT
9 ORDER BY
10 LIMIT
一看還是很自然和諧的,從哪里獲取,不斷的過濾條件,要選擇一樣或不一樣的,排好序,那才知道要取前幾條呢。
總結一下:
sql解析順序
總結
后面會分享更多devops和DBA方面的內容,感興趣的朋友可以關注一下~
總結
以上是生活随笔為你收集整理的oracle和mysql文件怎么打开_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明-sql文件怎么打开...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL查询输入三个数的和_mysql
- 下一篇: python 钉钉机器人自定义发送文件_