mysql怎么執(zhí)行過程 mysql怎么執(zhí)行命令

MySql中Sql的執(zhí)行過程

如果查詢緩存沒有命中,那么SQL請求會進(jìn)入分析器,分析器是用來分辨SQL語句的執(zhí)行目的,其執(zhí)行過程大致分為兩步:

創(chuàng)新互聯(lián)專注于興城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供興城營銷型網(wǎng)站建設(shè),興城網(wǎng)站制作、興城網(wǎng)頁設(shè)計、興城網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)公司服務(wù),打造興城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供興城網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

表1 語法分析關(guān)鍵字然后再通過語法規(guī)則解析,判斷輸入的SQL 語句是否滿足MySQL語法,并且生成圖5的語法樹。由SQL語句生成的四個單詞中,識別出兩個關(guān)鍵字,分別是select 和from。根據(jù)MySQL的語法Select 和 from之間對應(yīng)的是fields 字段,下面應(yīng)該掛接username;在from后面跟隨的是Tables字段,其下掛接的是userinfo。

優(yōu)化器的作用是對SQL進(jìn)行優(yōu)化,生成最有的執(zhí)行方案。如圖6所示,前面提到的SQL解析器通過語法分析和語法規(guī)則生成了SQL語法樹。這個語法樹作為優(yōu)化器的輸入,而優(yōu)化器(黃色的部分)包含了邏輯變換和代價優(yōu)化兩部分的內(nèi)容。在優(yōu)化完成以后會生成SQL執(zhí)行計劃作為整個優(yōu)化過程的輸出,交給執(zhí)行器在存儲引擎上執(zhí)行。

所處的位置如上圖所示,這節(jié)的重點在優(yōu)化器中的邏輯變換和代價優(yōu)化上。

邏輯變換也就是在關(guān)系代數(shù)基礎(chǔ)上進(jìn)行變換,其目的是為了化簡,同時保證SQL變化前后的結(jié)果一致,也就是邏輯變化并不會帶來結(jié)果集的變化。其主要包括以下幾個方面:

這樣講概念或許有些抽象,通過圖7 來看看邏輯變化如何在SQL中執(zhí)行的吧。

如圖7所示,從上往下共有4個步驟:

1. 針對存在的SQL語句,首先通過“否定消除”,去掉條件判斷中的“NOT”。語句由原來的“or”轉(zhuǎn)換成“and”,并且大于小于符號進(jìn)行變號。藍(lán)色部分為修改前的SQL,紅色是修改以后的SQL。2. 等值傳遞,這一步很好理解分別降”t2.a=9” 和”t2.b=5”分別替換掉SQL中對應(yīng)的值。3. 接下來就是常量表達(dá)式計算,將“5+7”計算得到“12”。4. 最后是常量表達(dá)式計算后的化簡,將”9=10”化簡為”true”帶入到最終的SQL表達(dá)式中完成優(yōu)化。

代價優(yōu)化是用來確定每個表,根據(jù)條件是否應(yīng)用索引,應(yīng)用哪個索引和確定多表連接的順序等問題。為了完成代價優(yōu)化,需要找到一個代價最小的方案。因此,優(yōu)化器是通過基于代價的計算方法來決定如何執(zhí)行查詢的(Cost-based Optimization)。簡化的過程如下:

這里將配置操作的代價分為MySQL 服務(wù)層和MySQL 引擎層,MySQL 服務(wù)層主要是定義CPU的代價,而MySQL 引擎層主要定義IO代價。MySQL 5.7 引入了兩個系統(tǒng)表mysql.server_cost和mysql.engine_cost來分別配置這兩個層的代價。如下:MySQL 服務(wù)層代價保存在表server_cost中,其具體內(nèi)容如下:

由上可以看出創(chuàng)建臨時表的代價是很高的,尤其是內(nèi)部的myisam或innodb臨時表。MySQL 引擎層代價保存在表engine_cost中,其具體內(nèi)容如下:

目前io_block_read_cost和memory_block_read_cost默認(rèn)值均為1,實際生產(chǎn)中建議酌情調(diào)大memory_block_read_cost,特別是對普通硬盤的場景。MySQL會根據(jù)SQL查詢生成的查詢計劃中對應(yīng)的操作從上面兩張代價表中查找對應(yīng)的代價值,并且進(jìn)行累加形成最終執(zhí)行SQL計劃的代價。再將多種可能的執(zhí)行計劃進(jìn)行比較,選取最小代價的計劃執(zhí)行。

當(dāng)分析器生成查詢計劃,并且經(jīng)過優(yōu)化器以后,就到了執(zhí)行器。執(zhí)行器會選擇執(zhí)行計劃開始執(zhí)行,但在執(zhí)行之前會校驗請求用戶是否擁有查詢的權(quán)限,如果沒有權(quán)限,就會返回錯誤信息,否則將會去調(diào)用MySQL引擎層的接口,執(zhí)行對應(yīng)的SQL語句并且返回結(jié)果。例如SQL:“SELECT * FROM userinfo WHERE username = 'Tom';“假設(shè) “username“ 字段沒有設(shè)置索引,就會調(diào)用存儲引擎從第一條開始查,如果碰到了用戶名字是” Tom“, 就將結(jié)果集返回,沒有查找到就查看下一行,重復(fù)上一步的操作,直到讀完整個表或者找到對應(yīng)的記錄。需要注意SQL語句的執(zhí)行順序并不是按照書寫順序來的,順序的定義會在分析器中做好,一般是按照如下順序:

如果命中的記錄比較多,應(yīng)用會從MySql Server一批批獲取數(shù)據(jù)

本文從MySQL中SQL語句的執(zhí)行過程作為切入點,首先介紹了查詢請求的執(zhí)行流程,其中將MySQL的處理分為MySQL Server層和MySQL存儲引擎層。通過介紹SQL語句的流轉(zhuǎn),引出了后面要介紹的5大組件,他們分別是:連接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器。后面的內(nèi)容中對每個組件進(jìn)行了詳細(xì)的介紹。連接器,負(fù)責(zé)身份認(rèn)證和權(quán)限鑒別;查詢緩存,將查詢的結(jié)果集進(jìn)行緩存,提高查詢效率;分析器,對SQL語句執(zhí)行語法分析和語法規(guī)則,生成語法樹和執(zhí)行計劃;優(yōu)化器,包括邏輯變換和代價優(yōu)化;執(zhí)行器,在檢查用戶權(quán)限以后對數(shù)據(jù)進(jìn)行逐條查詢,整個過程遵守SQL語句的執(zhí)行順序。

mysql怎么執(zhí)行一個存儲過程

給你個例子

drop procedure if exists call proc_temp;

delimiter $ //存儲過程從$ 開始

create procedure proc_temp(

IN startDate VARCHAR(20),//設(shè)置傳入的變量,沒有可以不要傳

IN endDate VARCHAR(20))

BEGIN

DECLARE dflag INT(11); //這里可以定義你需要的僅在存儲過程里使用的變量

SET dflag = 0;//初始化

select * from table where time between startDate and endDate ;//你的sql語句,可以一句可以多句

END $//存儲過程從$ 結(jié)束

delimiter ;

當(dāng)上面的選中運行后沒問題,可以選中下面的call xx 運行,上面的代碼沒有改動的話只需要運行一次

call proc_temp("2017-07-05","2017-08-05")

mysql安裝后怎么使用

在我們?nèi)粘I钪信紶枙龅揭恍┳约翰恢廊绾谓鉀Q的問題,比如使用安裝好的mysql。那么我們應(yīng)該怎樣解決這種自己不知道如何使用安裝好的mysql的情況呢?那么接下來就由我來介紹一下使用安裝好的mysql的步驟吧。

本次操作以Dell電腦為例,具體操作步驟如下:

第一步:

首先,打開MySQLWorkbench,雙擊打開即可。打開后的界面如下所示,然后選擇數(shù)據(jù)庫實例,雙擊進(jìn)行登錄。圖中數(shù)據(jù)庫的實例是LocalinstanceMYSQL57

第二步:

然后,輸入用戶名和密碼進(jìn)行登錄。如下圖所示:

第三步:

登錄成功后,界面如下所示。其中,區(qū)域1顯示的是數(shù)據(jù)庫服務(wù)器中已經(jīng)創(chuàng)建的數(shù)據(jù)庫列表。區(qū)域2是關(guān)于數(shù)據(jù)庫的操作列表。區(qū)域三是sql的編輯器和執(zhí)行環(huán)境,區(qū)域4是執(zhí)行結(jié)果的列表

第四步:

在sql的編輯器中輸入測試語句,如圖所示,其中world數(shù)據(jù)庫是mysql自帶的測試數(shù)據(jù)庫,然后選擇執(zhí)行(或者使用快捷鍵ctrl+enter)。執(zhí)行成功后,查詢結(jié)果會顯示在下面的列表中。

第五步:

使用完畢后,直接退出,并且如果無需數(shù)據(jù)庫的后繼操作的話,記得關(guān)掉MySQL的服務(wù)

看了我的方法,現(xiàn)在你學(xué)會如何使用安裝好的mysql了嗎?學(xué)會了的話就快快把這個方法分享出去,讓更多的人知道如何使用安裝好的mysql。以上就是使用安裝好的mysql的步驟。

本文章基于Dell品牌、Windows10系統(tǒng)撰寫的。

mysql怎么執(zhí)行存儲過程語句

比方說你創(chuàng)建存儲過程的語句如下:

create procedure test_proc(count int)

那么執(zhí)行存儲過程的語句就是:

call test_proc(500);

文章題目:mysql怎么執(zhí)行過程 mysql怎么執(zhí)行命令
當(dāng)前網(wǎng)址:http://muchs.cn/article14/doegpde.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、定制網(wǎng)站關(guān)鍵詞優(yōu)化、做網(wǎng)站、網(wǎng)站設(shè)計公司ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管