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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

JAVA执行过程sql,SQL 执行过程

發(fā)布時間:2023/12/10 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA执行过程sql,SQL 执行过程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、MySQL架構(gòu)總覽:

二、查詢執(zhí)行流程

一條select的生存周期:

流程:

1.連接

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

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

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

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

2.處理

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

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

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

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

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

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

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

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

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

3.結(jié)果

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

3.2返回的也可以是相應的狀態(tài)標識,如成功或失敗等;

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

查詢緩存(query cache)

在解析一個查詢語句之前,如果查詢緩存是打開的,那么MySQL會優(yōu)先檢查這個查詢是否命中查詢緩存中的數(shù)據(jù)。這個檢查是通過一個對大小寫敏感的哈希查找實現(xiàn)的。查詢和緩存中的查詢即使只有一個字節(jié)不同,那也不會匹配緩存結(jié)果,這種情況查詢會進入下一個階段的處理。

如果當前的查詢恰好命中了查詢緩存,那么在返回查詢結(jié)果之前MySQL會檢查一次用戶權(quán)限。這仍然是無須解析查詢SQL語句的,因為在查詢緩存中已經(jīng)存放了當前查詢需要訪問的表信息。如果權(quán)限沒有問題,MySQL會跳過所有其他階段,直接從緩存中拿到結(jié)果并返回給客戶端。這種情況下,查詢不會被解析,不用生成執(zhí)行計劃,不會被執(zhí)行。

語法解析器和預處理器

首先,MySQL通過關鍵字將SQL語句進行解析,并生成一棵對應的“解析樹”。MySQL解析器將使用MySQL語法規(guī)則驗證和解析查詢。例如,它將驗證是否使用錯誤的關鍵字,或者使用關鍵字的順序是否正確等,再或者它還會驗證引號是否能前后正確的匹配。

預處理器則根據(jù)一些MySQL規(guī)則進一步檢查解析樹是否合法,例如,這里講檢查數(shù)據(jù)表和數(shù)據(jù)列是否存在,還會解析名字和別名,看看它們是否有歧義。

下一步預處理器會驗證權(quán)限,這通常很快,除非服務器上有非常多的權(quán)限設置。

三、SQL解析順序

SQL語句:

SELECT DISTINCT FROM JOIN ON WHERE GROUP BY HAVING ORDER BY LIMIT

然而它的執(zhí)行順序是這樣的:

FROM ON JOIN WHERE GROUP BY HAVING SELECT DISTINCT ORDER BY LIMIT

這里配上sql 解析圖,很清晰:

總結(jié)

以上是生活随笔為你收集整理的JAVA执行过程sql,SQL 执行过程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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