1. <dd id="erndk"></dd>
                1. 數據庫指令如何執行

                  互聯網 2022/5/2 19:12:56

                  數據庫的結構 數據庫框架 數據庫的結構分為:大體分為兩個部分:client、server; server包括:連接器、緩存、優化器、執行器; 以及存儲引擎; 如圖:詳細說明服務器: 存儲引擎:支持數據的存儲以及接口的提供,支持多種存儲引擎,如InnoDB,Myisam,Memory等,Mysql5.5之…

                  數據庫的結構

                  數據庫框架

                  數據庫的結構分為:大體分為兩個部分:client、server;
                  server包括:連接器、緩存、優化器、執行器;
                  以及存儲引擎;
                  如圖:

                  詳細說明

                  • 服務器
                  • 存儲引擎:支持數據的存儲以及接口的提供,支持多種存儲引擎,如InnoDB,Myisam,Memory等,Mysql5.5之后默認使用InnoDB,在創建標的時候,不指定存儲引擎,默認InnoDB,也可以使用engine=memory指定,每一種存儲引擎使用場景不同;
                  • 連接器:客戶端每一次連接的時候,它都會進行權限的驗證,以及用戶密碼驗證,可以使用一下命令連接 > mysql -h $ip -u $user -p $password,也可以使用圖形界面的客戶端進行連接,使用命令一般不建議直接數據密碼,防止密碼泄露;

                  mysql分為長連接和短連接,長連接連接成功后,如果客戶端有請求一直會是同一個連接,短連接是執行多次查詢之后會斷開,重新再次連接,默認時間是8h,可以使用參數wait_timeout配置。

                  定期斷開長連接,使用一段時間之后,或者在一個大的查詢執行之后,斷開重新,之后查詢重新鏈接

                  如果使用的mysql5.7以及以上,可以使用mysql_restart_connection來初始化鏈接資源,其中是不需要重新鏈接和權限的驗證

                  這里說明一下,用戶連接之后,管理員再次更改用戶的權限的時候,是不影響已經獲取的權限的用戶,僅僅在重新鏈接之后才會起作用

                  • 分析器:一條查詢語句在分析其中是要進行語法分析和詞法分析,詞法分析就是要分析你的字符串代表的是什么,如select 就是代表查詢的意思,字符串ID分析就是對應你的列ID,

                  語法分析是指當你的的sql語句是夠符合sql的規范,如下面使用下面語句

                  mysql> elect * from depart;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'elect * from depart' at line 1

                  由于你少打了一個s,就會保存提示You have an error in your SQL syntax;

                  • 優化器:進過了分析器,知道了sql語句的含義,接下來,我們就要進行優化器的處理,一條語句的執行是有多個索引的,到底執行那個索引是由優化器來決定,比如下面的語句

                  select *  from  A a inner join B b on a.id=b.bid where a.name='jiepi' b.age=12

                  上面語句到底是查詢A表的name還是B表的age,他們的執行效率是不一樣的。

                  • 執行器:分析器分析你要干什么,優化器分析你要怎么執行,真正的執行是在執行器中執行

                  一條語句的執行,在判斷查詢的表是否有權限,如果沒有返回報錯,如果有權限直接打開表,然后根據表的引擎定義,使用引擎的查詢接。

                  select * from T where ID=10;

                  如上圖,他的執行流程如下

                  調用InnoDB引擎接口取第一行,如果是就放到結果集中,否則繼續第二行

                  調用存儲引擎的接口,重復執行,直到最后一行

                  最后把符合的結果返回給客戶端

                  你在查詢慢日志的時候會發現有一個rows_examined的字段,他就代表的執行器掃描的行數,但是有些場景執行器調用一次,存儲引擎內部會掃描多行,因此引擎掃描行和rows_examined是不一樣的。

                  • 緩存:緩存本是提高mysql性能的功能,當請求在緩存中命中,直接返回,但是有每一更新都會使緩存的數據失效,之前的緩存的數據就沒有用了,mysql8.0已經把緩存功能去掉了,

                  緩存的使用在某些場景還是可以使用的,比如一些系統配置變量,我們也可以使用SQL_CACHE顯示指定查詢緩存,也可以使用參數query_cache_type設置成DEMAND,禁止使用緩存

                  select SQL_CACHE *  from dpet;

                  參考文

                  mysql 查看sql hash,執行sql語句_Mysql進階篇--sql語句如何執行

                  隨時隨地學軟件編程-關注百度小程序和微信小程序
                  關于找一找教程網

                  本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
                  本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。
                  [數據庫指令如何執行]http://www.yachtsalesaustralia.com/tech/detail-318761.html

                  贊(0)
                  關注微信小程序
                  程序員編程王-隨時隨地學編程

                  掃描二維碼或查找【程序員編程王】

                  可以隨時隨地學編程啦!

                  技術文章導航 更多>
                  国产在线拍揄自揄视频菠萝

                        1. <dd id="erndk"></dd>