电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

詳解MySQL 查詢語句的執(zhí)行過程

瀏覽:7日期:2023-10-04 15:56:40

首先先簡單的將一個查詢語句背后MySQL做了什么捋一捋:

客戶端發(fā)送一條查詢給服務(wù)器。 服務(wù)器先檢查查詢緩存,如果命中了緩存,則立刻返回存儲在緩存中的結(jié)果。否則進(jìn)入下一個階段。 服務(wù)器端進(jìn)行SQL解析,預(yù)處理,再由優(yōu)化器生成對應(yīng)的執(zhí)行計(jì)劃。 MySQL根據(jù)優(yōu)化器生成的執(zhí)行計(jì)劃,調(diào)用存儲引擎的API來執(zhí)行查詢。 將結(jié)果返回給客戶端。

詳解MySQL 查詢語句的執(zhí)行過程

接著我們就將這個過程中的這些步驟詳細(xì)的進(jìn)行展開。

1.客戶端和服務(wù)器端之間的通信方式

客戶端和服務(wù)器之間的通信是一種半雙工的通信,即在同一時刻,只能有一方向另一方發(fā)送數(shù)據(jù)。所以客戶端在發(fā)送完查詢請求之后,所能做的就是等待服務(wù)器將查詢的結(jié)果返回,并且需要一直地等到返回的數(shù)據(jù)全部接收完畢后才能進(jìn)行下一步的操作,而不可以在服務(wù)器發(fā)送的過程中中斷發(fā)送或者斷開連接。

2.查詢緩存

在解析一個查詢語句之前,如果查詢緩存是打開著的,那么MySQL會優(yōu)先檢查這個查詢是否命中查詢緩存中的數(shù)據(jù)。這個檢查是通過一個對大小寫敏感的哈希表來實(shí)現(xiàn)的。在查詢命中緩存的情況下,直接從緩存中拿到結(jié)果并返回給客戶端。MySQL不會再執(zhí)行下面的操作,即查詢語句不會被解析,不會生成執(zhí)行計(jì)劃,不會被執(zhí)行。

3.查詢優(yōu)化處理

這個環(huán)節(jié)可能是整個查詢執(zhí)行過程中最為復(fù)雜的一個環(huán)節(jié),可以分為解析SQL,預(yù)處理和優(yōu)化SQL執(zhí)行計(jì)劃三個步驟。

(1)語法解析器和預(yù)處理這個過程就是對我們傳入的SQL語句的語法進(jìn)行檢查,以及驗(yàn)證查詢的權(quán)限。炳輝生成一棵“解析樹”。

(2)查詢優(yōu)化器在進(jìn)入到這一步時,證明我們的語句語法層面已經(jīng)沒有問題了。一條查詢可以有很多種執(zhí)行計(jì)劃都能返回正確的結(jié)果,這個環(huán)節(jié)就是來選取最優(yōu)的執(zhí)行計(jì)劃的。MySQL的最優(yōu)執(zhí)行計(jì)劃是基于成本的。MySQL會為每個操作設(shè)定一個成本(如執(zhí)行一次where比較),并從所有的執(zhí)行計(jì)劃中選擇“成本”最少的。我們可以使用下列語句查看上一個查詢操作的成本:

mysql> SHOW STATUS LIKE ’last_query_cost’;

MySQL會返回一個執(zhí)行的成本數(shù)據(jù):

+-----------------+----------+| Variable_name | Value |+-----------------+----------+| Last_query_cost | 0.549000 |+-----------------+----------+

但值得注意的是,這里的“成本”最小并不等于查詢的速度最快。即以“成本”來判斷查詢語句的優(yōu)劣有時候是不可靠的。

優(yōu)化器的優(yōu)化策略可以大致地分為兩種:靜態(tài)優(yōu)化和動態(tài)優(yōu)化。

靜態(tài)優(yōu)化是直接對之前生成的解析樹進(jìn)行分析,例如可以通過一些代數(shù)變換將where條件轉(zhuǎn)化為另一種等價形式。靜態(tài)優(yōu)化在第一次完成后就一直生效,即使使用不同的參數(shù)重復(fù)執(zhí)行查詢也不會發(fā)生變化,可以認(rèn)為是一種“編譯(預(yù)處理)時優(yōu)化”。

動態(tài)優(yōu)化和查詢的上下文相關(guān),需要在每一次查詢的時候重新評估,可以認(rèn)為是一種“運(yùn)行時優(yōu)化”。

下面是一些MySQL能夠處理的優(yōu)化類型:

重新定義關(guān)聯(lián)表的順序

有時候我們所給的查詢語句關(guān)聯(lián)表的順序可能對于查詢來說效率并不是最優(yōu)的,這時候MySQL可以自動幫我們將關(guān)聯(lián)表的順序進(jìn)行調(diào)整提高效率。

將外連接轉(zhuǎn)化為內(nèi)連接

并不是所有的OUT JOIN語句都必須以外連接的方式執(zhí)行。MySQL能夠識別這一點(diǎn)并重寫查詢,讓其可以調(diào)整關(guān)聯(lián)順序。

使用等價變換規(guī)則

使用一些等價的語句來減少比較的次數(shù),移除一些恒成立和不恒成立的條件。例如,(5=5 AND a>5)會被改寫為a>5;如果有(a5 AND b=c AND a=5。

優(yōu)化COUNT()、MIN()和MAX()

索引和列是否為空可以幫助優(yōu)化這一類表達(dá)式。例如查找最小值的時候就可以借助索引直接查找最左端的記錄,這樣就不用進(jìn)行整個表的查詢,而是以一個常數(shù)進(jìn)行取代。

覆蓋索引掃描

當(dāng)索引中的列包含所有查詢中需要使用的列的時候,MySQL就會使用索引返回所需要的數(shù)據(jù),而無須查詢對應(yīng)的數(shù)據(jù)行。

提前終止查詢

在發(fā)現(xiàn)查詢已經(jīng)能滿足需求的時候,MySQL總能立刻終止查詢。一個典型的例子就是當(dāng)使用了LIMIT子句的時候。

至此,MySQL服務(wù)器層已經(jīng)根據(jù)所給的查詢語句給出了一個最優(yōu)的執(zhí)行計(jì)劃。但是我們需要知道的是,我們到目前為止所進(jìn)行的一些列的操作都是在服務(wù)器層進(jìn)行的,而這一層中并不是數(shù)據(jù)存儲的地方。因此接下來我們需要拿著我們的最優(yōu)執(zhí)行計(jì)劃去到實(shí)際的存儲引擎中進(jìn)行查找。因此就引出了我們的下一步操作:向存儲引擎獲取相應(yīng)的統(tǒng)計(jì)信息。

4.查詢執(zhí)行引擎

相對于查詢優(yōu)化階段,查詢執(zhí)行階段并不是那么復(fù)雜。MySQL只是簡單地根據(jù)執(zhí)行計(jì)劃給出的指令逐步執(zhí)行。

5.返回結(jié)果給客戶端

查詢執(zhí)行的最后一個階段是將結(jié)果返回給客戶端,即使查詢不需要返回結(jié)果集給客戶端,MySQL仍然會返回這個查詢的一些信息,例如查詢影響的行數(shù)。如果查詢可以被緩存,這個階段MySQL會講查詢的結(jié)果放到查詢緩存中。返回結(jié)果的過程是一個逐步增量的過程。即當(dāng)拿到第一個結(jié)果的時候就開始向客戶端返回了。這樣做的好處是不會一次性返回全部數(shù)據(jù)導(dǎo)致占用內(nèi)存過多,而且客戶端也能在第一時間拿到結(jié)果。結(jié)果集中的每一行都會以一個滿足MySQL客戶端/服務(wù)器通信協(xié)議的封包發(fā)送,再通過TCP協(xié)議進(jìn)行傳輸,在TCP傳輸?shù)倪^程中,可能對封包進(jìn)行緩存后再批量發(fā)傳輸。

以上就是詳解MySQL 查詢語句的執(zhí)行過程的詳細(xì)內(nèi)容,更多關(guān)于MySQL 查詢語句的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 外贸资讯网 - 洞悉全球贸易,把握市场先机 | 猪I型/II型胶原-五克隆合剂-细胞冻存培养基-北京博蕾德科技发展有限公司 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 桌上式超净工作台-水平送风超净工作台-上海康路仪器设备有限公司 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 重庆轻质隔墙板-重庆安吉升科技有限公司 | 汽液过滤网厂家_安平县银锐丝网有限公司 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 驾驶式洗地机/扫地机_全自动洗地机_工业洗地机_荣事达工厂官网 | 365文案网_全网创意文案句子素材站 | 深圳公司注册-工商注册代理-注册公司流程和费用_护航财税 | 卫生型双针压力表-高温防腐差压表-安徽康泰电气有限公司 | 淄博不锈钢,淄博不锈钢管,淄博不锈钢板-山东振远合金科技有限公司 | led太阳能路灯厂家价格_风光互补庭院灯_农村市政工程路灯-中山华可路灯品牌 | 优考试_免费在线考试系统_培训考试系统_题库系统_组卷答题系统_匡优考试 | 开锐教育-学历提升-职称评定-职业资格培训-积分入户 | 新型游乐设备,360大摆锤游乐设备「诚信厂家」-山东方鑫游乐设备 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 苏州工作服定做-工作服定制-工作服厂家网站-尺品服饰科技(苏州)有限公司 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 北京西风东韵品牌与包装设计公司,创造视觉销售力! | 最新范文网_实用的精品范文美文网| 广西绿桂涂料--承接隔热涂料、隔音涂料、真石漆、多彩仿石漆等涂料工程双包施工 | 农产品溯源系统_农产品质量安全追溯系统_溯源系统 | 河北凯普威医疗器材有限公司,高档轮椅系列,推车系列,座厕椅系列,协步椅系列,拐扙系列,卫浴系列 | 阀门智能定位器_电液动执行器_气动执行机构-赫尔法流体技术(北京)有限公司 | 法兰螺母 - 不锈钢螺母制造厂家 - 万千紧固件--螺母街 | 流水线电子称-钰恒-上下限报警电子秤-上海宿衡实业有限公司 | 进口便携式天平,外校_十万分之一分析天平,奥豪斯工业台秤,V2000防水秤-重庆珂偌德科技有限公司(www.crdkj.com) | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 水冷式工业冷水机组_风冷式工业冷水机_水冷螺杆冷冻机组-深圳市普威机械设备有限公司 | 砂石生产线_石料生产线设备_制砂生产线设备价格_生产厂家-河南中誉鼎力智能装备有限公司 | 浙江上沪阀门有限公司| 山东钢衬塑罐_管道_反应釜厂家-淄博富邦滚塑防腐设备科技有限公司 | 户外健身路径_小区健身器材_室外健身器材厂家_价格-浩然体育 | 钢板仓,大型钢板仓,钢板库,大型钢板库,粉煤灰钢板仓,螺旋钢板仓,螺旋卷板仓,骨料钢板仓 | 山东PE给水管厂家,山东双壁波纹管,山东钢带增强波纹管,山东PE穿线管,山东PE农田灌溉管,山东MPP电力保护套管-山东德诺塑业有限公司 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 风淋室生产厂家报价_传递窗|送风口|臭氧机|FFU-山东盛之源净化设备 | AGV无人叉车_激光叉车AGV_仓储AGV小车_AGV无人搬运车-南昌IKV机器人有限公司[官网] |