日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle和mysql文件怎么打开_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明-sql文件怎么打开...

發(fā)布時(shí)間:2025/5/22 数据库 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle和mysql文件怎么打开_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明-sql文件怎么打开... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

概述

之前分享的主要是Oracle上的一些內(nèi)容,那么mysql又有哪些地方不一樣呢?下面從MySQL總體架構(gòu)、sql查詢執(zhí)行流程和語句執(zhí)行順序來看一下。。

01

架構(gòu)總覽

下面看一下mysql的架構(gòu)圖:

mysql架構(gòu)

從上圖中我們可以看到,整個(gè)架構(gòu)分為兩層,上層是MySQLD的被稱為的‘SQL Layer’,下層是各種各樣對上提供接口的存儲(chǔ)引擎,被稱為‘Storage Engine Layer’。其它各個(gè)模塊和組件,從名字上就可以簡單了解到它們的作用,這里就不多做介紹了。

再看一下Oracle的架構(gòu):

Oracle系統(tǒng)體系結(jié)構(gòu)由三部分組成:邏輯結(jié)構(gòu)、物理結(jié)構(gòu)和實(shí)例。

02

查詢執(zhí)行流程

理解sql查詢執(zhí)行的流程對優(yōu)化是很重要的,下面介紹下mysql的查詢執(zhí)行流程:

1.連接1.1客戶端發(fā)起一條Query請求,監(jiān)聽客戶端的‘連接管理模塊’接收請求

1.2將請求轉(zhuǎn)發(fā)到‘連接進(jìn)/線程模塊’

1.3調(diào)用‘用戶模塊’來進(jìn)行授權(quán)檢查

1.4通過檢查后,‘連接進(jìn)/線程模塊’從‘線程連接池’中取出空閑的被緩存的連接線程和客戶端請求對接,如果失敗則創(chuàng)建一個(gè)新的連接請求

2.處理2.1先查詢緩存,檢查Query語句是否完全匹配,接著再檢查是否具有權(quán)限,都成功則直接取數(shù)據(jù)返回

2.2上一步有失敗則轉(zhuǎn)交給‘命令解析器’,經(jīng)過詞法分析,語法分析后生成解析樹

2.3接下來是預(yù)處理階段,處理解析器無法解決的語義,檢查權(quán)限等,生成新的解析樹

2.4再轉(zhuǎn)交給對應(yīng)的模塊處理

2.5如果是SELECT查詢還會(huì)經(jīng)由‘查詢優(yōu)化器’做大量的優(yōu)化,生成執(zhí)行計(jì)劃

2.6模塊收到請求后,通過‘訪問控制模塊’檢查所連接的用戶是否有訪問目標(biāo)表和目標(biāo)字段的權(quán)限

2.7有則調(diào)用‘表管理模塊’,先是查看table cache中是否存在,有則直接對應(yīng)的表和獲取鎖,否則重新打開表文件

2.8根據(jù)表的meta數(shù)據(jù),獲取表的存儲(chǔ)引擎類型等信息,通過接口調(diào)用對應(yīng)的存儲(chǔ)引擎處理

2.9上述過程中產(chǎn)生數(shù)據(jù)變化的時(shí)候,若打開日志功能,則會(huì)記錄到相應(yīng)二進(jìn)制日志文件中

3.結(jié)果3.1Query請求完成后,將結(jié)果集返回給‘連接進(jìn)/線程模塊’

3.2返回的也可以是相應(yīng)的狀態(tài)標(biāo)識(shí),如成功或失敗等

3.3‘連接進(jìn)/線程模塊’進(jìn)行后續(xù)的清理工作,并繼續(xù)等待請求或斷開與客戶端的連接

最后一圖做小總結(jié):

mysql查詢執(zhí)行流程

在看一下Oracle的sql查詢執(zhí)行流程:

1、當(dāng)一用戶第一次提交一個(gè)SQL表達(dá)式時(shí),Oracle會(huì)將這SQL進(jìn)行Hard parse,這過程有點(diǎn)像程序編譯,檢查語法、表名、字段名等相關(guān)信息(如下圖),這過程會(huì)花比較長的時(shí)間,因?yàn)樗治稣Z句的語法與語義。然后獲得最優(yōu)化后的執(zhí)行計(jì)劃(sql plan),并在內(nèi)存中分配一定的空間保存該語句與對應(yīng)的執(zhí)行計(jì)劃等信息。

2、當(dāng)用戶第二次請求或多次請求時(shí),Oracle會(huì)自動(dòng)找到先前的語句與執(zhí)行計(jì)劃,而不會(huì)進(jìn)行Hard parse,而是直接進(jìn)行Soft parse(把語句對應(yīng)的執(zhí)行計(jì)劃調(diào)出,然后執(zhí)行),從而減少數(shù)據(jù)庫的分析時(shí)間。

注意的是:Oracle中只能完全相同的語句,包大小寫、空格、換行都要求一樣時(shí),才會(huì)重復(fù)使用以前的分析結(jié)果與執(zhí)行計(jì)劃。

03

SQL解析順序

這一塊Oracle和mysql都是一樣的,所以就不區(qū)別開了。看一個(gè)實(shí)例: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 >

執(zhí)行順序是這樣的1 FROM

2 ON

3 JOIN

4 WHERE

5 GROUP BY

6 HAVING

7 SELECT

8 DISTINCT

9 ORDER BY

10 LIMIT

一看還是很自然和諧的,從哪里獲取,不斷的過濾條件,要選擇一樣或不一樣的,排好序,那才知道要取前幾條呢。

總結(jié)一下:

sql解析順序

總結(jié)

后面會(huì)分享更多devops和DBA方面的內(nèi)容,感興趣的朋友可以關(guān)注一下~

總結(jié)

以上是生活随笔為你收集整理的oracle和mysql文件怎么打开_Oracle vs Mysql--架构、sql查询执行流程及SQL解析顺序区别说明-sql文件怎么打开...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。