介紹一些有趣的MySQL pager命令

1、分頁結果集mysql

Linux系統中,咱們常常也會使用一些分頁查看命令,例如less、more等。一樣,MySQL客戶端也提供了相似的命令,用來幫助咱們對查詢結果集進行分頁。好比,SHOW ENGINE INNODB STATUS時經過分頁看鎖信息時是很是有用的,這樣就不用一屏到底了。linux

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

如今你能夠輕鬆瀏覽結果集了(使用q退出,空格向下滾動等)。sql

若是你想離開你的自定義pager,這很容易,只需運行pager命令:less

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

或者工具

mysql> \n
PAGER set to stdout

可是pager命令並不侷限於這種基本用法!你能夠將查詢輸出傳遞給大多數可以處理文本的Unix程序。這裏有一些例子。命令行

2、丟棄結果集索引

有時你不關心結果集,只想查看時間信息。若是你經過更改索引爲查詢嘗試不一樣的執行計劃,則可能會出現這種狀況。使用pager能夠丟棄結果:md5

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)

如今,在一個屏幕上查看全部時間信息要容易得多。ssl

3、比較結果集get

假設你正在重寫查詢,而且想要在重寫以前和以後檢查結果集是否相同。不幸的是,它有不少行:

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

你能夠計算校驗和,只比較校驗和,而不是手動比較每一行:

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)

嗯,校驗和不匹配,出了點問題。咱們重試一下:

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

校驗和是相同的,重寫的查詢極可能產生與原始查詢相同的結果。

4、結合系統命令

若是MySQL上有不少鏈接,那麼很難讀取SHOW PROCESSLIST的輸出。例如,若是你有幾百個鏈接,而且你想知道有多少鏈接處於Sleep狀態,手動計算SHOW PROCESSLIST輸出中的行可能不是最佳解決方案。使用pager,它很簡單:

mysql> pager grep Sleep | wc -l
PAGER set to 'grep Sleep | wc -l'

mysql> show processlist;
337
346 rows in set (0.00 sec)

這應該被解讀爲346個鏈接中337正處於Sleep狀態。

如今稍微複雜一點:你想知道每一個狀態的鏈接數

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

固然,這些問題能夠經過查詢INFORMATION_SCHEMA來解決。例如,計算Sleep鏈接的數量能夠經過如下方式完成:

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

並計算每一個狀態的鏈接數能夠經過如下方式完成:

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 |
+-------------+-------+

可是,有些人可能對編寫SQL查詢感受更舒服,而其餘人則更喜歡使用命令行工具。

如你所見,pager是你的朋友!它很是易於使用,它能夠以優雅和高效的方式解決問題。你甚至能夠編寫自定義腳本(若是它太複雜而沒法放在一行中)並將其傳遞給pager。總之,多使用pager命令能讓你的工做事半功倍。

相關文章
相關標籤/搜索