最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySql中sql語句執(zhí)行過程詳細講解

 更新時間:2023年02月21日 09:33:36   作者:喜歡豬豬  
天天和數(shù)據(jù)庫打交道,一天能寫上幾十條 SQL 語句,但你知道我們的系統(tǒng)是如何和數(shù)據(jù)庫交互的嗎?下面這篇文章主要給大家介紹了關(guān)于MySql中sql語句執(zhí)行過程詳細講解的相關(guān)資料,需要的朋友可以參考下

前言:

很多人都在使用mysql數(shù)據(jù)庫,但是很少有人能夠說出來整個sql語句的執(zhí)行過程是怎樣的,如果不了解執(zhí)行過程的話,就很難進行sql語句的優(yōu)化處理,也很難設(shè)計出來優(yōu)良的數(shù)據(jù)庫表結(jié)構(gòu)。這篇文章主要是講解一下sql語句的執(zhí)行過程。

sql語句的執(zhí)行過程:

客戶端、連接器、分析器、優(yōu)化器、執(zhí)行器、存儲引擎幾個階段。

連接器的作用:管理鏈接、權(quán)限驗證的處理。

分析器的作用:詞法分析、語法分析。

優(yōu)化器的作用:執(zhí)行計劃的生成、索引選擇。

執(zhí)行器的作用:操作引擎、返回結(jié)果。

存儲引擎的作用:存儲數(shù)據(jù)、提供讀寫接口。

另外的一個分支是,會進行查詢緩存的操作,如果命中了緩存則直接返回的操作。

mysql可以分為server層和存儲引擎層兩個部分:

server層:

包括鏈接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器等,涵蓋Mysql的大多數(shù)核心服務(wù)功能,以及所有的內(nèi)置函數(shù)(日期、時間、數(shù)學(xué)、和加密函數(shù)等),所有的存儲引擎的功能都在這一部分實現(xiàn)的,比如說存儲過程、觸發(fā)器、視圖。

存儲引擎:

主要負責(zé)數(shù)據(jù)的存儲和提取,其架構(gòu)模式是插件式的,支持InnoDB、Memory等多個存儲引擎。最常用的是InnoDB,這個主要在Mysql5.5版本開始成為了默認存儲引擎。

當(dāng)在執(zhí)行sql查詢的時候,如果不指定引擎類型、默認使用的innoDB。當(dāng)然也可以指定存儲引擎類型進行處理,比如說創(chuàng)建表的時候,可以把存儲引擎修改為memory,進行表的創(chuàng)建出合理。當(dāng)然了,不同的存儲引擎的表數(shù)據(jù)存儲方式也是不一樣的。

連接器:

執(zhí)行sql語句的時候,第一步需要進行數(shù)據(jù)庫的連接處理,連接器負責(zé)客戶端建立連接、獲取權(quán)限、維持和管理連接。

根據(jù)命令可以看出來,主要進行幾個參數(shù)的輸入,IP地址、端口號、以及用戶名、密碼的處理。連接mysql是客戶端工具,用戶服務(wù)器建立連接,進行tcp握手之后,連接器需要進行身份的驗證,然后輸入用戶名、密碼。

密碼不對的時候,會收到一個“Access denied for user”的錯誤提示,然后客戶端結(jié)束執(zhí)行。

用戶名、密碼驗證通過之后,連接器就會開始進行權(quán)限表查詢權(quán)限,然后進行權(quán)限的操作處理。

連接完成之后,沒有進行其他的操作,這個時候連接就處于空閑狀態(tài),show processlist。

客戶端如果長時間不操作的話,默認的等待時間(wait_timeout)是八個小時。

數(shù)據(jù)庫建立連接是比較復(fù)雜的,建議在項目中盡量少的建立連接的操作,也就是說盡量使用長連接的處理。

在項目中經(jīng)常會遇到一種情況就是數(shù)據(jù)庫的長連接,很長時間不關(guān)閉的操作,這個時候會導(dǎo)致內(nèi)存的占用太大,被系統(tǒng)殺掉導(dǎo)致的Mysql的異常。

解決方案有下面兩種方案:

  • 定期斷開長連接,使用一段時間之后,比如說執(zhí)行一個占用內(nèi)存的大查詢之后,這個時候斷開連接,之后要查詢的話再重新連接。
  • 通過使用命令進行重新初始化連接資源,這個時候需要重連,但是會把連接恢復(fù)到初始化的狀態(tài)。

查詢緩存:

連接建立完畢之后,進行查詢緩存的處理,執(zhí)行sql語句會先到緩存中看看是不是剛剛執(zhí)行了這條語句,之前執(zhí)行過的語句及其結(jié)果就會以key-value對的形式直接存儲在內(nèi)存中的,key是查詢的語句,value是查詢的結(jié)果,如果查詢能夠直接在這個緩存中找到key,那么這個value可以直接返回給客戶端。

如果語句不在查詢緩存中的話,就會繼續(xù)后面的執(zhí)行階段,執(zhí)行完成后,執(zhí)行結(jié)果會被存入查詢緩存中。如果可以查詢到緩存的話,就不會進行后面的復(fù)雜操作了,效率會高很多。

查詢緩存的弊端:

查詢緩存失敗一般情況下會比較頻繁,只要對一個表的進行了更新的話,這個表上面所有的緩存就會被清空。因此一般情況下查詢緩存的命中率很低。一般情況下,一個系統(tǒng)的配置表或者靜態(tài)的表才會使用到查詢緩存的方式進行處理。

分析器:

分析器首先會進行詞法分析,輸入的是由多個字符串和空格組成的一條sql語句,mysql需要識別出來里面的字符串分別是什么,代表什么意思。

首先:mysql從輸入的select這個關(guān)鍵詞識別出來,這個是一個查詢的語句,需要把from關(guān)鍵字后面的,字符串t識別出來表名稱等等的操作。

然后進行語法分析的處理,根據(jù)詞法分析,根據(jù)詞法分析的結(jié)果,語句分析器就會根據(jù)語法規(guī)則判斷輸入的這個sql語句是否滿足mysql的語法。

檢查出來錯誤提示如下圖:

一般提示錯誤的信息只會進行第一個錯誤的位置。

優(yōu)化器:

經(jīng)過了分析器的處理,mysql就知道了該如何進行優(yōu)化器的處理了,優(yōu)化器的處理邏輯是在表里面進行多個索引的時候,決定使用那個索引,或者說在一個語句有多個關(guān)聯(lián)的時候,決定各個表的連接順序的情況,如下圖所示:

第一種執(zhí)行的結(jié)果是處理t1.c=10是否走索引,然后可以先判斷 一下邏輯的結(jié)果是否一樣,如果執(zhí)行的結(jié)果是一樣的話,可以任意選擇一種方案進行處理。

執(zhí)行器:

  • 調(diào)用InNoDB引擎接口取這個表的第一行,判斷值是否10,如果是10進行集中處理,否則的話就跳過。
  • 執(zhí)行器將遍歷過程中所有滿足條件的行組成的記錄集合返回給客戶端。

總結(jié)

到此這篇關(guān)于MySql中sql語句執(zhí)行過程詳細講解的文章就介紹到這了,更多相關(guān)MySql sql語句執(zhí)行過程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用mysqldump導(dǎo)出導(dǎo)入mysql表結(jié)構(gòu)或者數(shù)據(jù)

    使用mysqldump導(dǎo)出導(dǎo)入mysql表結(jié)構(gòu)或者數(shù)據(jù)

    這篇文章主要介紹了使用mysqldump導(dǎo)出導(dǎo)入mysql表結(jié)構(gòu)或者數(shù)據(jù)的相關(guān)資料,mysqldump是MySQL數(shù)據(jù)庫備份工具,用于導(dǎo)出數(shù)據(jù)和表結(jié)構(gòu),可以使用命令行工具運行該工具,并指定數(shù)據(jù)庫和表的名稱,導(dǎo)出的數(shù)據(jù)可以保存為SQL文件,需要的朋友可以參考下
    2024-12-12
  • MySQL全文索引like模糊匹配查詢慢解決方法

    MySQL全文索引like模糊匹配查詢慢解決方法

    這篇文章主要為大家介紹了MySQL全文索引like模糊匹配查詢慢解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • MySQL基礎(chǔ)之MySQL 5.7 新增配置

    MySQL基礎(chǔ)之MySQL 5.7 新增配置

    mysql數(shù)據(jù)庫性能非常高,運行速度非???,接下來通過本文給大家介紹MySQL 5.7 新增配置,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • redhat 5.4下安裝MYSQL全過程

    redhat 5.4下安裝MYSQL全過程

    自己需要的是用JAVA環(huán)境而不是用php+apache這種一鍵安裝的東西,所以果斷自己來安裝自己想要的東西了,下面與大家分享下redhat 5.4下安裝MYSQL全過程,感興趣的朋友可以參考下哈
    2013-06-06
  • MySQL修改root密碼的多種方法(推薦)

    MySQL修改root密碼的多種方法(推薦)

    本文給大家分享了三種方法來解決mysql修改root密碼的方法,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-03-03
  • MySQL中UNION與UNION ALL的基本使用方法

    MySQL中UNION與UNION ALL的基本使用方法

    這篇文章主要給大家介紹了關(guān)于MySQL中UNION與UNION ALL的基本使用方法,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用MySQL具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 詳解SQL注入--安全(二)

    詳解SQL注入--安全(二)

    這篇文章主要介紹了SQL注入安全,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • MySQL通用表空間的幾個選項使用指南

    MySQL通用表空間的幾個選項使用指南

    在?MySQL?數(shù)據(jù)庫中有效管理存儲和性能至關(guān)重要,通用表空間為實現(xiàn)這一目標(biāo)提供了靈活性,本文討論通用表空間并探討其功能、優(yōu)點和實際用法,并附有說明性示例
    2024-01-01
  • mysql 5.7.13 winx64安裝配置教程

    mysql 5.7.13 winx64安裝配置教程

    這篇文章主要為大家分享了windows下mysql 5.7.13winx64安裝配置教程,總結(jié)在安裝mysql5.7時遇到的坑,感興趣的朋友可以參考一下
    2016-12-12
  • MySQL慢查詢以及解決方案詳解

    MySQL慢查詢以及解決方案詳解

    MySQL的慢查詢,全名是慢查詢?nèi)罩?是MySQL提供的一種日志記錄,用來記錄在MySQL中響應(yīng)時間超過閥值的語句,下面這篇文章主要給大家介紹了關(guān)于MySQL慢查詢以及解決方案的相關(guān)資料,需要的朋友可以參考下
    2023-05-05

最新評論

辽源市| 宣汉县| 米易县| 沁阳市| 香格里拉县| 甘孜| 镇沅| 河北省| 确山县| 牙克石市| 红原县| 祥云县| 栾川县| 吉木乃县| 东莞市| 淮安市| 垦利县| 密云县| 凤阳县| 鹿邑县| 西林县| 凤凰县| 黄梅县| 夹江县| 陆川县| 西贡区| 彰武县| 肃南| 嘉祥县| 普格县| 咸阳市| 蛟河市| 盘锦市| 长武县| 永城市| 邓州市| 屏山县| 清涧县| 金坛市| 平定县| 漯河市|