1、分页结果集html
在Linux系统中,咱们常常也会使用一些分页查看命令,例如less、more等。一样,MySQL客户端也提供了相似的命令,用来帮助咱们对查询结果集进行分页。好比,SHOW ENGINE INNODB STATUS时经过分页看锁信息时是很是有用的,这样就不用一屏到底了。mysql
mysql> pager less PAGER set to 'less' mysql> show engine innodb status\G [...]
如今你能够轻松浏览结果集了(使用q退出,空格向下滚动等)。linux
若是你想离开你的自定义pager,这很容易,只需运行pager命令:sql
mysql> pager Default pager wasn't set, using stdout.
或者less
mysql> \n PAGER set to stdout
可是pager命令并不局限于这种基本用法!你能够将查询输出传递给大多数可以处理文本的Unix程序。这里有一些例子。工具
2、丢弃结果集命令行
有时你不关心结果集,只想查看时间信息。若是你经过更改索引为查询尝试不一样的执行计划,则可能会出现这种状况。使用pager能够丢弃结果:htm
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)
如今,在一个屏幕上查看全部时间信息要容易得多。索引
3、比较结果集md5
假设你正在重写查询,而且想要在重写以前和以后检查结果集是否相同。不幸的是,它有不少行:
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命令能让你的工做事半功倍。