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

歡迎訪問 生活随笔!

生活随笔

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

数据库

怎么将sql语句转化成语法树_数据库如何解析执行SQL

發布時間:2024/9/27 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 怎么将sql语句转化成语法树_数据库如何解析执行SQL 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

閱讀文本大概需要3分鐘。

0x01:數據庫客戶端發送查詢SQL

? ? ? 客戶端將查詢的select sql,按照mysql通信協議傳輸到數據庫服務。數據庫服務接受查詢sql,執行sql前判斷要執行的sql是否是查詢語句。

0x02:查詢緩存先行MySQL在開啟查詢緩存的情況下,首先會先在查詢緩存中查找該SQL是否完全匹配,如果完全匹配,驗證當前用戶是否具備查詢權限,如果權限驗證通過,直接返回結果集給客戶端,該查詢也就完成了。如果不匹配繼續向下執行。

緩存配置參數:

  • query_cache_limit:?MySQL能夠緩存的最大結果,如果超出,則增加 Qcache_not_cached的值,并刪除查詢結果

  • query_cache_min_res_unit: 分配內存塊時的最小單位大小

  • query_cache_size:?緩存使用的總內存空間大小,單位是字節,這個值必須是1024的整數倍,否則MySQL實際分配可能跟這個數值不同(感覺這個應該跟文件系統的blcok大小有關)

  • query_cache_type:?是否打開緩存?OFF?關閉 ;ON?總是打開

  • query_cache_wlock_invalidate: 如果某個數據表被鎖住,是否仍然從緩存中返回數據,默認是OFF,表示仍然可以返回

0x03:語法分析器和查詢預處理器如果在查詢緩存中未匹配成功,則將語句交給分析器作語法分析。MySQL通過關鍵字將SQL語句進行解析,并生成一棵對應的“解析樹”。MySQL解析器將使用MySQL語法規則驗證和解析查詢,通過分析語法知道要查的內容。這個步驟會對語法進行檢驗,如果語法不對就會返回語法錯誤中斷查詢。否則,下一步預處理器會驗證權限。0x04:查詢優化器

? ? ? 語法樹被認為合法之后,由優化器將其轉化為執行計劃。一條查詢可以有很多種執行方式,最后都返回相同的結果。優化器的作用就是找到這其中最好的執行計劃。

? ? ? MySQL使用基于成本的優化器,它將嘗試預測一個查詢使用某種執行計劃的成本,并選擇其中成本最小的一個。最初,成本的最小單位是隨機讀取一個4K數據頁的成本,后來成本計算公式變得更加復雜,并且引入了一些“因子”來估算某些操作的代價,如當執行一次where條件比較的成本。可以通過查詢當前會話的last_query_cost的值來得知MySQL計算的當前查詢的成本。

有很多種原因會導致MySQL優化器選擇錯誤的執行計劃,比如:

1. 統計信息不準確。

2. 執行計劃中的成本估算不等同于實際的執行計劃的成本。

3. MySQL的最優可能與你想的最優不一樣。

4. MySQL從不考慮其他并發的查詢,這可能會影響當前查詢的速度。

5. MySQL也不是任何時候都是基于成本的優化,有時候也會基于一些固定的規則。

6. MySQL不會考慮不受其控制的成本,例如執行存儲過程或者用戶自定義的函數的成本。

? ? ? MySQL的查詢優化使用了很多優化策略來生成一個最優的執行的計劃。優化策略可以分為兩種,靜態優化和動態優化。靜態優化可以直接對解析樹進行分析,并完成優化。例如優化器可以通過一些簡單的代數變換將where條件轉換成另一種等價形式。靜態優化不依賴于特別的數值,如where條件中帶入的一些常數等。靜態優化在第一次完成后就一直有效,即使使用不同的參數重復查詢也不會變化,可以認為是一種“編譯時優化”。

? ? ? 相反,動態優化則和查詢的上下文有關。也可能和很多其他因素有關,例如where條件中的取值、索引中條目對應的數據行數等,這些需要每次查詢的時候重新評估,可以認為是“運行時優化”。

下面是一些MySQL能夠處理的優化類型:

1. 重新定義關聯表的順序

? ? ? 數據表的關聯并不總是按照在查詢中指定的順序進行,決定關聯的順序是優化器很重要的一部分功能。

2. 將外連接轉化成內連接

? ? ? ?并不是所有的outer join語句都必須以外連接的方式執行。諸多因素,例如where條件、庫表結構都可能會讓外連接等價于一個內連接。MySQL能夠識別這點并重寫查詢,讓其可以調整關聯順序。

3. 使用等價變換規則

? ? ? ?MySQL可以使用一些等價變換來簡化并規范表達式。它可以合并和減少一些比較,還可以移除一些恒成立和一些恒不成立的判斷。例如:(5=5 and a>5)將被改寫為a>5。類似的,如果有(a5 and b=c and a=5。

4. 優化count()、min()和max()

? ? ? 索引和列是否為空通常可以幫助MySQL優化這類表達式。例如,要找到一列的最小值,只需要查詢對應B-tree索引最左端的記錄,MySQL可以直接獲取索引的第一行記錄。在優化器生成執行計劃的時候就可以利用這一點,在B-tree索引中,優化器會講這個表達式最為一個常數對待。類似的,如果要查找一個最大值,也只需要讀取B-tree索引的最后一個記錄。如果MySQL使用了這種類型的優化,那么在explain中就可以看到“select tables optimized away”。從字面意思可以看出,它表示優化器已經從執行計劃中移除了該表,并以一個常數取而代之。

? ? ? ?類似的,沒有任何where條件的count(*)查詢通常也可以使用存儲引擎提供的一些優化,例如,MyISAM維護了一個變量來存放數據表的行數。

5. 預估并轉化為常數表達式

6. 覆蓋索引掃描

? ? ? ?當索引中的列包含所有查詢中需要使用的列的時候,MySQL就可以使用索引返回需要的數據,而無需查詢對應的數據行。

7. 子查詢優化

? ? ? MySQL在某些情況下可以將子查詢轉換成一種效率更高的形式,從而減少多個查詢多次對數據進行訪問。

8. 提前終止查詢

? ? ? 在發現已經滿足查詢需求的時候,MySQL總是能夠立即終止查詢。一個典型的例子就是當使用了limit子句的時候。除此之外,MySQL還有幾種情況也會提前終止查詢,例如發現了一個不成立的條件,這時MySQL可以立即返回一個空結果。

上面的例子可以看出,查詢在優化階段就已經終止。

9. 等值傳播

10. 列表in()的比較

? ? ? 在很多數據庫系統中,in()完全等同于多個or條件的字句,因為這兩者是完全等價的。在MySQL中這點是不成立的,MySQL將in()列表中的數據先進行排序,然后通過二分查找的方式來確定列表中的值是否滿足條件,這是一個o(log n)復雜度的操作,等價轉換成or的查詢的復雜度為o(n),對于in()列表中有大量取值的時候,MySQL的處理速度會更快。

0x05:查詢執行器

? ? ? ?在解析和優化階段,MySQL將生成查詢對應的執行計劃,MySQL的查詢執行引擎則根據這個執行計劃來完成整個查詢。這里執行計劃是一個數據結構,而不是和很多其他的關系型數據庫那樣會生成對應的字節碼。

? ? ? ?相對于查詢優化階段,查詢執行階段不是那么復雜:MySQL只是簡單的根據執行計劃給出的指令逐步執行。在根據執行計劃逐步執行的過程中,有大量的操作需要通過調用存儲引擎實現的接口來完成,這些接口就是我們稱為“handler API”的接口。實際上,MySQL在優化階段就為每個表創建了一個handler實例,優化器根據這些實例的接口可以獲取表的相關信息,包括表的所有列名、索引統計信息等。

? ? ?最后,交給執行器去具體執行該查詢語句。執行器開始執行后,會逐漸將數據保存到結果集中,同時會逐步將數據緩存到查詢緩存中,最終將結果集返回給客戶端。

往期精彩

01?漫談發版哪些事,好課程推薦

02?Linux的常用最危險的命令

03?精講Spring Boot—入門+進階+實例

04?優秀的Java程序員必須了解的GC哪些

05?互聯網支付系統整體架構詳解

關注我

每天進步一點點

喜歡!在看?

總結

以上是生活随笔為你收集整理的怎么将sql语句转化成语法树_数据库如何解析执行SQL的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 男人添女人下部高潮视频 | 国产男男网站 | 陪读偷伦初尝小说 | 激情开心站 | 黑人黄色一级片 | 夜夜躁狠狠躁日日躁 | 天天视频色| 女人下面喷水视频 | 欧美美女性生活视频 | 国产精品永久 | 欧美日b片 | 蜜桃av在线 | 成人av影视在线 | 少妇1~3伦理| 国产精成人 | 99涩涩| 亚洲黄色成人网 | 国产人成在线 | 欧美成人aaaa | 不卡视频一区二区 | 日韩欧美在线中文字幕 | 久草热线 | 国产精品无码网站 | 丰满岳乱妇在线观看中字无码 | 亚洲女同二女同志 | 国产精品一卡二卡三卡 | 老熟女高潮一区二区三区 | 午夜精品国产 | 东北老女人av | 日本一区二区在线 | 日本人与黑人做爰视频 | 97国产免费 | 欧美日韩高清在线观看 | 黄色av播放 | 国产h片在线观看 | 国产无套免费网站69 | 日韩中文字幕免费 | 亚洲国产精品成人无码区 | 成人性色生活片 | av天天堂| 日本激情一区二区三区 | 日韩免费不卡视频 | 91在线免费视频观看 | 欧美区在线观看 | 亚洲日本韩国在线 | 热99| 欧美日韩一区二区三区四区五区 | 男女野外做受全过程 | se日韩 | 中文字幕观看在线 | 精品国产乱码久久久久久免费 | 欧美人与动性xxxxx杂性 | 亚洲 国产 欧美 日韩 | 国产精品综合在线 | 91天天| 香蕉视频免费在线观看 | 成人在线视频免费观看 | 国产剧情一区 | 国产精品熟女一区二区不卡 | 久久丫精品久久丫 | 欧美三级在线观看视频 | 亚洲欧美一区二区三区在线 | 日韩视频成人 | 影音先锋一区 | 91av欧美 | 自拍啪啪| 国产日本一区二区 | 加勒比在线免费视频 | 米奇影视第四色 | 乱妇乱女熟妇熟女网站 | 黄色电影在线视频 | 亚洲精品天堂在线观看 | 欧美激情自拍 | 午夜影院18| 青青草.com | 国产亚洲一区二区在线 | 国产精品96久久久久久 | www..com国产| 色臀| 中文字幕精品无 | 女生裸体无遮挡 | 成人免费午夜 | 午夜免费福利影院 | 欧美性俱乐部 | 成人音影 | 中国国产毛片 | 欧美日韩人妻精品一区二区三区 | 美女福利在线观看 | 韩国妻子的朋友 | 外国黄色网 | 精品一区二区三区无码视频 | 国产精品久久久网站 | 精品国产理论 | 国产乱淫av麻豆国产免费 | 成年人网站在线观看视频 | 99久国产 | 伊人精品影院 | 中文字幕91在线 | 夜夜骚av|