欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

mysql怎么查執(zhí)行,mysql查看執(zhí)行過(guò)的sql

如何查詢mysql的執(zhí)行記錄

-- 打開sql 執(zhí)行記錄功能

創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,先為柘城等服務(wù)建站,柘城等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為柘城企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

set global log_output='TABLE'; -- 輸出到表

set global log=ON; -- 打開所有命令

執(zhí)行記錄功能general_log, 所有語(yǔ)句: 成功和未成功的.

set global log_slow_queries=ON; -- 打開慢查詢 sql 記錄

slow_log, 執(zhí)行成功的: 慢查詢語(yǔ)句和未使用索引的語(yǔ)句

set global long_query_time=0.1; -- 慢查詢時(shí)間限制(秒)

set global log_queries_not_using_indexes=ON; -- 記錄未使用索引的sql 語(yǔ)句

-- 查詢sql 執(zhí)行記錄

select * from mysql.slow_log order by 1; -- 執(zhí)行成功的:慢查詢語(yǔ)句,和未

使用索引的語(yǔ)句

select * from mysql.general_log order by 1; -- 所有語(yǔ)句: 成功和未成功的.-- 關(guān)閉sql 執(zhí)行記錄

Mysql學(xué)會(huì)查看sql的執(zhí)行計(jì)劃

首先在Mysql的服務(wù)中有 連接器、查詢緩存(Mysql8 已經(jīng)刪除)、分析器、優(yōu)化器、執(zhí)行器等,所有跨存儲(chǔ)引擎的功能都在這一層實(shí)現(xiàn)

而一條sql怎么執(zhí)行是由優(yōu)化器決定的,?優(yōu)化器是在表里面有多個(gè)索引的時(shí)候,決定使用哪個(gè)索引;或者在一個(gè)語(yǔ)句有多表關(guān)聯(lián)(join)的時(shí)候,決定各個(gè)表的連接順序。

而執(zhí)行計(jì)劃就是優(yōu)化器優(yōu)化后的sql的執(zhí)行的詳細(xì)方案

Mysql中查看執(zhí)行計(jì)劃的方式有兩種 : 1. 使用desc? ? 2.使用 explain? 使用它倆的效果是一樣的

接下來(lái)要通過(guò)執(zhí)行計(jì)劃知道sql是怎么執(zhí)行的

執(zhí)行計(jì)劃中有幾個(gè)重要的字段, 分別是?

id,? table,? type,? possible_keys,? key,? key_len, Extra

id :? 可以通過(guò)ID來(lái)查看在多表聯(lián)查中sql是先查詢哪張表的 id相同的從上往下依次執(zhí)行,id不同的id大的先執(zhí)行

table :? ?table當(dāng)然就是查詢的表名

type :? 查詢的類型? ?查詢類型分為??ALL,??index,??range,??ref ,?eq_ref,?const(system),??null

? ? ALL: 指的全盤掃描,沒(méi)有走任何索引? ?查詢結(jié)果集大于25% 優(yōu)化器可能會(huì)走全盤掃描? ?字符串查詢的時(shí)候一定要加"" 不然可能會(huì)全索引掃描(隱式轉(zhuǎn)換)? ?統(tǒng)計(jì)信息 失效 或者 過(guò)舊 也可能走全盤掃描? 因?yàn)閮?yōu)化器會(huì)參考統(tǒng)計(jì)信息來(lái)制定執(zhí)行計(jì)劃

???index:?全索引掃描? 就是掃描整顆索引樹

? ? ? ?range: 索引范圍? 查詢索引樹的一部分范圍? ?范圍索引中 ? ? =? =? like? 的效率會(huì)比? or? ?in? 的效率高, 使用like %再前面的不走索引

ref:? ?輔助索引的等值查詢? ??????????

? ? ? ? ? ? ? ? 當(dāng)查詢的數(shù)據(jù)量小,優(yōu)化器也有可能會(huì)走索引的全盤掃描? 這里我就不貼圖了;

???eq_ref : 多表連接查詢中,被連接的表的連接條件列是主鍵或者唯一鍵

???const(system): 主鍵 或者 唯一鍵 的等值查詢

? ? ? ? ? ?null: 沒(méi)有數(shù)據(jù)

他們的性能是依次遞增的 全盤掃描性能最差,? const性能最高

possible_keys:? 查詢過(guò)程中可能用到的索引

key: 真正使用到的索引

key_len:? 走索引的長(zhǎng)度

? ? 這個(gè)是怎么計(jì)算的呢???

???key_len 的計(jì)算方法 :

int 類型最長(zhǎng)存儲(chǔ)4個(gè)字節(jié)長(zhǎng)度的數(shù)字? 有not null? 是4字節(jié)? 沒(méi)有的話會(huì)花1字節(jié)存儲(chǔ)是不是null

tinyint 最大存儲(chǔ)一個(gè)字節(jié)? ? 也會(huì)花1字節(jié)來(lái)判斷是不是null

字符串類型 : 字符集 utf8mb4? 1-4字節(jié)

varchar超過(guò)255會(huì)預(yù)留2個(gè)字節(jié)存儲(chǔ)長(zhǎng)度 沒(méi)超預(yù)留1個(gè)字節(jié)

key_len 永遠(yuǎn)是你設(shè)置的長(zhǎng)度的最大的??

聯(lián)合索引可以通過(guò)key_len 來(lái)判斷走了幾個(gè)索引

? ? 使用desc format=json select * from table 可以查看詳細(xì)情況

filtered:? 索引掃描過(guò)濾掉數(shù)據(jù)的占比

Extra: 額外的信息?

??? Using filesort :MySQL?對(duì)數(shù)據(jù)在sql層進(jìn)行了排序,而不是按照表內(nèi)的索引進(jìn)行排序讀 取。 效率比較低

??? Using temporary :使用臨時(shí)表保存中間結(jié)果,也就是說(shuō) MySQL 在對(duì)查詢結(jié)果排序時(shí)使用了臨時(shí)表,常見于order by 或 group by。

??? Using index :表示 SQL 操作中使用了覆蓋索引(Covering Index),避免了訪問(wèn)表的數(shù)據(jù)行,效率高。

??? Using index condition :表示 SQL 操作命中了索引,但不是所有的列數(shù)據(jù)都在索引樹上,還需要訪問(wèn)實(shí)際的行記錄。

??? Using where :表示 SQL 操作使用了 where 過(guò)濾條件。

??? Select tables optimized away :基于索引優(yōu)化 MIN/MAX 操作或者 MyISAM 存儲(chǔ)引擎優(yōu)化 COUNT(*) 操作,不必等到執(zhí)行階段再進(jìn)行計(jì)算,查詢執(zhí)行計(jì)劃生成的階段即可完成優(yōu)化。

Using join buffer (Block Nested Loop) :表示 SQL 操作使用了關(guān)聯(lián)查詢或者子查詢,且需要進(jìn)行嵌套循環(huán)計(jì)算

如何查看mysql執(zhí)行進(jìn)度

有時(shí)候我們會(huì)不小心對(duì)一個(gè)大表進(jìn)行了 update,比如說(shuō)寫錯(cuò)了 where 條件......

此時(shí),如果 kill 掉 update 線程,那回滾 undo log 需要不少時(shí)間。如果放置不管,也不知道 update 會(huì)持續(xù)多久。

那我們能知道 update 的進(jìn)度么?

實(shí)驗(yàn)

我們先創(chuàng)建一個(gè)測(cè)試數(shù)據(jù)庫(kù):

快速創(chuàng)建一些數(shù)據(jù):

連續(xù)執(zhí)行同樣的 SQL 數(shù)次,就可以快速構(gòu)造千萬(wàn)級(jí)別的數(shù)據(jù):

查看一下總的行數(shù):

我們來(lái)釋放一個(gè)大的 update:

然后另起一個(gè) session,觀察 performance_schema 中的信息:

可以看到,performance_schema 會(huì)列出當(dāng)前 SQL 從引擎獲取的行數(shù)。

等 SQL 結(jié)束后,我們看一下 update 從引擎總共獲取了多少行:

可以看到該 update 從引擎總共獲取的行數(shù)是表大小的兩倍,那我們可以估算:update 的進(jìn)度 = (rows_examined) / (2 * 表行數(shù))

????小貼士

information_schema.tables 中,提供了對(duì)表行數(shù)的估算,比起使用 select count(1) 的成本低很多,幾乎可以忽略不計(jì)。

那么是不是所有的 update,從引擎中獲取的行數(shù)都會(huì)是表大小的兩倍呢?這個(gè)還是要分情況討論的,上面的 SQL 更新了主鍵,如果只更新內(nèi)容而不更新主鍵呢?我們來(lái)試驗(yàn)一下:

等待 update 結(jié)束,查看 row_examined,發(fā)現(xiàn)其剛好是表大小:

那我們?cè)趺礈?zhǔn)確的這個(gè)倍數(shù)呢?

一種方法是靠經(jīng)驗(yàn):update 語(yǔ)句的 where 中會(huì)掃描多少行,是否修改主鍵,是否修改唯一鍵,以這些條件來(lái)估算系數(shù)。

另一種方法就是在同樣結(jié)構(gòu)的較小的表上試驗(yàn)一下,獲取倍數(shù)。

這樣,我們就能準(zhǔn)確估算一個(gè)“不小心”執(zhí)行的大型 update 的進(jìn)度了。

網(wǎng)頁(yè)標(biāo)題:mysql怎么查執(zhí)行,mysql查看執(zhí)行過(guò)的sql
網(wǎng)址分享:http://chinadenli.net/article24/dsggece.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)服務(wù)器托管商城網(wǎng)站搜索引擎優(yōu)化自適應(yīng)網(wǎng)站云服務(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)

成都定制網(wǎng)站網(wǎng)頁(yè)設(shè)計(jì)