溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL中pager命令有哪些

發(fā)布時(shí)間:2021-11-02 17:02:15 來(lái)源:億速云 閱讀:286 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章主要介紹了MySQL中pager命令有哪些,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

一、分頁(yè)結(jié)果集

在 Linux系統(tǒng) 中,我們經(jīng)常也會(huì)使用一些分頁(yè)查看命令,例如less、more等。同樣,MySQL客戶端也提供了類似的命令,用來(lái)幫助我們對(duì)查詢結(jié)果集進(jìn)行分頁(yè)。比如,SHOW ENGINE INNODB STATUS時(shí)通過(guò)分頁(yè)看鎖信息時(shí)是非常有用的,這樣就不用一屏到底了。

mysql> pager less
PAGER set to 'less'
mysql> show engine innodb status\G
[...]

現(xiàn)在你可以輕松瀏覽結(jié)果集了(使用q退出,空格向下滾動(dòng)等)。

如果你想離開(kāi)你的自定義pager,這很容易,只需運(yùn)行pager命令:

mysql> pager
Default pager wasn't set, using stdout.

或者

mysql> \n
PAGER set to stdout

但是pager命令并不局限于這種基本用法!你可以將查詢輸出傳遞給大多數(shù)能夠處理文本的Unix程序。這里有一些例子。

二、丟棄結(jié)果集

有時(shí)你不關(guān)心結(jié)果集,只想查看時(shí)間信息。如果你通過(guò)更改索引為查詢嘗試不同的執(zhí)行計(jì)劃,則可能會(huì)出現(xiàn)這種情況。使用pager可以丟棄結(jié)果:

mysql> pager cat > /dev/null
PAGER set to 'cat > /dev/null'
# Trying an execution plan
mysql> SELECT ...
1000 rows in set (0.91 sec)
# Another execution plan
mysql> SELECT ...
1000 rows in set (1.63 sec)

現(xiàn)在,在一個(gè)屏幕上查看所有時(shí)間信息要容易得多。

三、比較結(jié)果集

假設(shè)你正在重寫查詢,并且想要在重寫之前和之后檢查結(jié)果集是否相同。不幸的是,它有很多行:

mysql> SELECT ...
[..]
989 rows in set (0.42 sec)

你可以計(jì)算校驗(yàn)和,只比較校驗(yàn)和,而不是手動(dòng)比較每一行:

mysql> pager md5sum
PAGER set to 'md5sum'
 
# Original query
mysql> SELECT ...
32a1894d773c9b85172969c659175d2d  -
1 row in set (0.40 sec)
 
# Rewritten query - wrong
mysql> SELECT ...
fdb94521558684afedc8148ca724f578  -
1 row in set (0.16 sec)

嗯,校驗(yàn)和不匹配,出了點(diǎn)問(wèn)題。我們重試一下:

# Rewritten query - correct
mysql> SELECT ...
32a1894d773c9b85172969c659175d2d  -
1 row in set (0.17 sec)

校驗(yàn)和是相同的,重寫的查詢很可能產(chǎn)生與原始查詢相同的結(jié)果。

四、結(jié)合系統(tǒng)命令

如果MySQL上有很多連接,那么很難讀取SHOW PROCESSLIST的輸出。例如,如果你有幾百個(gè)連接,并且你想知道有多少連接處于Sleep狀態(tài),手動(dòng)計(jì)算SHOW PROCESSLIST輸出中的行可能不是最佳解決方案。使用pager,它很簡(jiǎn)單:

mysql> pager grep Sleep | wc -l
PAGER set to 'grep Sleep | wc -l'
mysql> show processlist;
337
346 rows in set (0.00 sec)

這應(yīng)該被解讀為346個(gè)連接中337正處于Sleep狀態(tài)。

現(xiàn)在稍微復(fù)雜一點(diǎn):你想知道每個(gè)狀態(tài)的連接數(shù)

mysql> pager awk -F '|' '{print $6}' | sort | uniq -c | sort -r
PAGER set to 'awk -F '|' '{print $6}' | sort | uniq -c | sort -r'
mysql> show processlist;
    309  Sleep
      3
      2  Query
      2  Binlog Dump
      1  Command

當(dāng)然,這些問(wèn)題可以通過(guò)查詢INFORMATION_SCHEMA來(lái)解決。例如,計(jì)算Sleep連接的數(shù)量可以通過(guò)以下方式完成:

mysql> SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND='Sleep';
+----------+
| COUNT(*) |
+----------+
|      320 |
+----------+

并計(jì)算每個(gè)狀態(tài)的連接數(shù)可以通過(guò)以下方式完成:

mysql> SELECT COMMAND,COUNT(*) TOTAL FROM INFORMATION_SCHEMA.PROCESSLIST GROUP BY COMMAND ORDER BY TOTAL DESC;
+-------------+-------+
| COMMAND     | TOTAL |
+-------------+-------+
| Sleep       |   344 |
| Query       |     5 |
| Binlog Dump |     2 |
+-------------+-------+

但是,有些人可能對(duì)編寫SQL查詢感覺(jué)更舒服,而其他人則更喜歡使用命令行工具。

如你所見(jiàn),pager是你的朋友!它非常易于使用,它可以以優(yōu)雅和高效的方式解決問(wèn)題。你甚至可以編寫自定義腳本(如果它太復(fù)雜而無(wú)法放在一行中)并將其傳遞給pager。總之,多使用pager命令能讓你的工作事半功倍。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“MySQL中pager命令有哪些”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI