1.當(dāng)我們請(qǐng)求mysql服務(wù)器的時(shí)候,MySQL前端會(huì)有一個(gè)監(jiān)聽,請(qǐng)求到了之后,服務(wù)器得到相關(guān)的SQL語(yǔ)句,執(zhí)行之前(虛線部分為執(zhí)行),還會(huì)做權(quán)限的判斷
創(chuàng)新互聯(lián)主要從事網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)甘泉,十多年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):028-86922220
2.通過權(quán)限之后,SQL就到MySQL內(nèi)部,他會(huì)在查詢緩存中,看該SQL有沒有執(zhí)行過,如果有查詢過,則把緩存結(jié)果返回,說(shuō)明在MySQL內(nèi)部,也有一個(gè)查詢緩存.但是這個(gè)查詢緩存,默認(rèn)是不開啟的,這個(gè)查詢緩存,和我們的Hibernate,Mybatis的查詢緩存是一樣的,因?yàn)椴樵兙彺嬉骃QL和參數(shù)都要一樣,所以這個(gè)命中率是非常低的(沒什么卵用的意思)。
3.如果我們沒有開啟查詢緩存,或者緩存中沒有找到對(duì)應(yīng)的結(jié)果,那么就到了解析器,解析器主要對(duì)SQL語(yǔ)法進(jìn)行解析
4.解析結(jié)束后就變成一顆解析樹,這個(gè)解析樹其實(shí)在Hibernate里面也是有的,大家回憶一下,在以前做過Hibernate項(xiàng)目的時(shí)候,是不是有個(gè)一個(gè)antlr.jar。這個(gè)就是專門做語(yǔ)法解析的工具.因?yàn)樵贖ibernate里面有HQL,它就是通過這個(gè)工具轉(zhuǎn)換成SQL的,我們編程語(yǔ)言之所以有很多規(guī)范、語(yǔ)法,其實(shí)就是為了便于這個(gè)解析器解析,這個(gè)學(xué)過編譯原理的應(yīng)該知道.
5.得到解析樹之后,不能馬上執(zhí)行,這還需要對(duì)這棵樹進(jìn)行預(yù)處理,也就是說(shuō),這棵樹,我沒有經(jīng)過任何優(yōu)化的樹,預(yù)處理器會(huì)這這棵樹進(jìn)行一些預(yù)處理,比如常量放在什么地方,如果有計(jì)算的東西,把計(jì)算的結(jié)果算出來(lái)等等...
6.預(yù)處理完畢之后,此時(shí)得到一棵比較規(guī)范的樹,這棵樹就是要拿去馬上做執(zhí)行的樹,比起之前的那棵樹,這棵得到了一些優(yōu)化
7.查詢優(yōu)化器,是MySQL里面最關(guān)鍵的東西,我們寫任何一條SQL,比如SELECT * FROM USER WHERE USERNAME = toby AND PASSWORD = 1,它會(huì)怎么去執(zhí)行?它是先執(zhí)行username = toby還是password = 1?每一條SQL的執(zhí)行順序查詢優(yōu)化器就是根據(jù)MySQL對(duì)數(shù)據(jù)統(tǒng)計(jì)表的一些信息,比如索引,比如表一共有多少數(shù)據(jù),MySQL都是有緩存起來(lái)的,在真正執(zhí)行SQL之前,他會(huì)根據(jù)自己的這些數(shù)據(jù),進(jìn)行一個(gè)綜合的判定,判斷這一次在多種執(zhí)行方式里面,到底選哪一種執(zhí)行方式,可能運(yùn)行的最快.這一步是MySQL性能中,最關(guān)鍵的核心點(diǎn),也是我們的優(yōu)化原則.我們平時(shí)所講的優(yōu)化SQL,其實(shí)說(shuō)白了,就是想讓查詢優(yōu)化器,按照我們的想法,幫我們選擇最優(yōu)的執(zhí)行方案,因?yàn)槲覀儽萂ySQL更懂我們的數(shù)據(jù).MySQL看數(shù)據(jù),僅僅只是自己收集到的信息,這些信息可能是不準(zhǔn)確的,MySQL根據(jù)這些信息選了一個(gè)它自認(rèn)為最優(yōu)的方案,但是這個(gè)方案可能和我們想象的不一樣.
8.這里的查詢執(zhí)行計(jì)劃,也就是MySQL查詢中的執(zhí)行計(jì)劃,比如要先執(zhí)行username = toby還是password = 1
9.這個(gè)執(zhí)行計(jì)劃會(huì)傳給查詢執(zhí)行引擎,執(zhí)行引擎選擇存儲(chǔ)引擎來(lái)執(zhí)行這一份傳過來(lái)的計(jì)劃,到磁盤中的文件中去查詢,這個(gè)時(shí)候重點(diǎn)來(lái)了,影響這個(gè)查詢性能最根本的原因是什么?就是硬盤的機(jī)械運(yùn)動(dòng),也就是我們平時(shí)熟悉的IO,所以一條查詢語(yǔ)句是快還是慢,就是根據(jù)這個(gè)時(shí)間的IO來(lái)確定的.那怎么執(zhí)行IO又是什么來(lái)確定的?就是傳過來(lái)的這一份執(zhí)行計(jì)劃.(優(yōu)化就是制定一個(gè)我們認(rèn)為最快的執(zhí)行方案,最節(jié)省IO,和執(zhí)行最快)
10.如果開了查詢緩存,則返回結(jié)果給客戶端,并且查詢緩存也放一份。
php調(diào)用mysql存儲(chǔ)過程和函數(shù)的方法
存儲(chǔ)過程和函數(shù)是MySql5.0剛剛引入的。關(guān)于這方面的操作在PHP里面沒有直接的支持。但是由于Mysql PHP API的設(shè)計(jì),使得我們可以在以前的PHP版本中的mysql php api中支持存儲(chǔ)過程和函數(shù)的調(diào)用。
在php中調(diào)用存儲(chǔ)過程和函數(shù)。
1。調(diào)用存儲(chǔ)過程的方法。
a。如果存儲(chǔ)過程有 IN/INOUT參數(shù),聲明一個(gè)變量,輸入?yún)?shù)給存儲(chǔ)過程,該變量是一對(duì),
一個(gè)php變量(也可以不必,只是沒有php變量時(shí),沒有辦法進(jìn)行動(dòng)態(tài)輸入),一個(gè)Mysql
變量。
b。如果存儲(chǔ)過程有OUT變量,聲明一個(gè)Mysql變量。
mysql變量的聲明比較特殊,必須讓mysql服務(wù)器知道此變量的存在,其實(shí)也就是執(zhí)行一條mysql語(yǔ)句。
入set @mysqlvar=$phpvar ;
c。使用mysql_query()/mysql_db_query()執(zhí)行mysql 變量聲明語(yǔ)句。
mysql_query("set @mysqlvar=$pbpvar");
這樣,在mysql服務(wù)器里面就有一個(gè)變量,@mysqlar。如果是IN參數(shù),那么其值可以由phpar傳入。
d。 如果是存儲(chǔ)過程。
1。執(zhí)行 call procedure()語(yǔ)句。
也就是mysql_query("call proceduer([var1]...)");
2. 如果有返回值,執(zhí)行select @ar,返回執(zhí)行結(jié)果。
mysql_query("select @var)"
接下來(lái)的操作就和php執(zhí)行一般的mysql語(yǔ)句一樣了。可以通過mydql_fetch_row()等函數(shù)獲得結(jié)果。
如果時(shí)函數(shù)。 直接執(zhí)行 select function() 就可以了。
$host="localhost";
$user="root";
$password="11212";
$db="samp_db";
$dblink=mysql_connect($host,$user,$password)
or die("can't connect to mysql");
mysql_select_db($db,$dblink)
or die("can't select samp_db");
$res=mysql_query("set @a=$password",$dblink);
$res=mysql_query("call aa(@a)",$dblink);
$res=mysql_query("select @a",$dblink);
$row=mysql_fetch_row($res);
echo $row[0];
navicat 怎樣調(diào)試mysql存儲(chǔ)過程
使用Navicat for MySQL工具創(chuàng)建存儲(chǔ)過程步驟:
1. 新建函數(shù)(選擇函數(shù)標(biāo)簽 - 點(diǎn)擊新建函數(shù)):
2、輸入函數(shù)的參數(shù)個(gè)數(shù)、參數(shù)名、參數(shù)類型等:
3、編寫存儲(chǔ)過程:
4、保存(請(qǐng)輸入合法名稱):
5、運(yùn)行存儲(chǔ)過程(在結(jié)果1,2,3...中可以查詢輸出信息):
本文標(biāo)題:mysql存儲(chǔ)怎么調(diào)試 mysql如何調(diào)試存儲(chǔ)過程
當(dāng)前路徑:http://www.chinadenli.net/article42/dddhjec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、品牌網(wǎng)站制作、外貿(mào)建站、網(wǎng)站建設(shè)、電子商務(wù)、微信小程序
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)