sql查詢(xún)語(yǔ)句性能優(yōu)化技巧 一條更新的SQL語(yǔ)句是如何執(zhí)行的?
一條更新的SQL語(yǔ)句是如何執(zhí)行的?第一步:連接器首先,您需要連接到數(shù)據(jù)庫(kù),并輸入ip、端口和帳戶(hù)密碼。然后根據(jù)你的賬號(hào)密碼,連接器會(huì)驗(yàn)證你的身份。有兩種情況:1。如果用戶(hù)密碼不正確,您將被拒絕訪問(wèn)。2
一條更新的SQL語(yǔ)句是如何執(zhí)行的?
第一步:連接器
首先,您需要連接到數(shù)據(jù)庫(kù),并輸入ip、端口和帳戶(hù)密碼。然后根據(jù)你的賬號(hào)密碼,連接器會(huì)驗(yàn)證你的身份。
有兩種情況:1。如果用戶(hù)密碼不正確,您將被拒絕訪問(wèn)。
2.驗(yàn)證通過(guò)后,連接器到權(quán)限表獲取該賬戶(hù)下的權(quán)限,用于本次連接后的權(quán)限判斷。
第二種情況是指,如果這個(gè)連接仍然保持,如果管理員更改了你的帳戶(hù)的權(quán)限,也不會(huì)影響你的帳戶(hù)。只有斷開(kāi)連接再重新連接才有意義。此外,如果你還沒(méi)有 如果此后沒(méi)有對(duì)此連接做任何事情,連接器將自動(dòng)斷開(kāi)連接,默認(rèn)時(shí)間是8小時(shí)。
這里要注意一點(diǎn):你所有操作的臨時(shí)記憶都會(huì)存儲(chǔ)在你的連接中,只有斷開(kāi)后才會(huì)釋放。所以如果長(zhǎng)時(shí)間保持連接,大內(nèi)存的操作占用內(nèi)存太多,Mysql就會(huì)被系統(tǒng)重啟。
所以如果有大內(nèi)存操作,最好重新連接,釋放臨時(shí)內(nèi)存!如果你的Mysql版本是5.7以上,可以通過(guò)執(zhí)行mysql_reset_connection來(lái)釋放臨時(shí)內(nèi)存。
第二步:檢查緩存。
連接之后,如果執(zhí)行一個(gè)查詢(xún)語(yǔ)句,會(huì)先去緩存。如果您以前執(zhí)行過(guò)該語(yǔ)句,它將以鍵值對(duì)的形式存儲(chǔ)在緩存中。key是查詢(xún)語(yǔ)句,value是結(jié)果,可以直接返回。
聽(tīng)起來(lái)不錯(cuò),而且。;緩存后非常舒服,但是經(jīng)常使用緩存弊大于利!你說(shuō)什么?
例如,如果您在一個(gè)表中查找10條語(yǔ)句,它們都會(huì)被緩存。如果這個(gè)表的update語(yǔ)句進(jìn)來(lái),它 結(jié)束了。之前所有緩存都會(huì)清空!答案是零!除非是靜態(tài)表,基本沒(méi)有更新,可以用緩存!
注意8.0版本直接屏蔽了緩存,這個(gè)功能沒(méi)有了。
第三步:分析器
如果緩存失敗,它將會(huì)出現(xiàn)在解析器中。首先分析詞法,比如select和你的表名、列名等關(guān)鍵字,然后分析語(yǔ)法,確定你的語(yǔ)句是否符合語(yǔ)法。如果不是,通常會(huì)給你一個(gè)你的SQL語(yǔ)法有錯(cuò)誤?
第四步:優(yōu)化程序
經(jīng)過(guò)分析,Mysql其實(shí)是知道你想要什么的,但是還是要幫你優(yōu)化!比如決定用哪個(gè)指數(shù)?如何按順序連接表格?
例如,select * from a join b on wh:。
通過(guò)存儲(chǔ)引擎的接口調(diào)用引擎返回表的第一行,看t是否為10。如果是,它將被存儲(chǔ)在結(jié)果集中,否則將被跳過(guò)。
繼續(xù)調(diào)用接口獲取第二行,直到遍歷完成。
然后將結(jié)果集返回給客戶(hù)端。
有些人可能想知道為什么在第五步中驗(yàn)證權(quán)限。為什么不在優(yōu)化器之前做呢?
因?yàn)橛袝r(shí)候SQL語(yǔ)句操作的不僅僅是字面上的SQL,比如你有一個(gè)觸發(fā)器,這個(gè)觸發(fā)器只有在執(zhí)行的時(shí)候才能被確認(rèn),所以驗(yàn)證權(quán)限這一步就得由執(zhí)行人來(lái)做,前面的可以 還沒(méi)完。
Mysql中一條語(yǔ)句的執(zhí)行就這樣完成了!
sql語(yǔ)句查詢(xún)速度是1分鐘慢嗎?
可以?xún)?yōu)化。我們最近在做的就是用三臺(tái)30G內(nèi)存12核的虛擬機(jī)。對(duì)于6.14億條數(shù)據(jù)(Mysql中130G,parquet格式中30G),多字段分組聚合一個(gè)字段計(jì)數(shù)(distinct)大約需要30秒,而普通查詢(xún)大約需要2秒。所以我覺(jué)得你的情況還有很大的優(yōu)化空間。