介绍一些有趣的MySQL pager命令
一、分页结果集
在Linux系统中中,我们经常也会使用一些分页查看命令,例如less、more等。同样,MySQL客户端也提供了类似的命令,用来帮助我们对查询结果集进行分页。比如,SHOW ENGINE INNODB STATUS时通过分页看锁信息时是非常有用的,这样就不用一屏到底了。
mysql> pager less
PAGER set to 'less'
mysql> show engine innodb status\G
[...]
现在你可以轻松浏览结果集了(使用q退出,空格向下滚动等)。
如果你想离开你的自定义pager,这很容易,只需运行pager命令:
mysql> pager
Default pager wasn't set, using stdout.
或者
mysql> \n
PAGER set to stdout
但是pager命令并不局限于这种基本用法!你可以将查询输出传递给大多数能够处理文本的Unix程序。这里有一些例子。
有时你不关心结果集,只想查看时间信息。如果你通过更改索引为查询尝试不同的执行计划,则可能会出现这种情况。使用pager可以丢弃结果:
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)
现在,在一个屏幕上查看所有时间信息要容易得多。
假设你正在重写查询,并且想要在重写之前和之后检查结果集是否相同。不幸的是,它有很多行:
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)
嗯,Linux系统的校验和不匹配,出了点问题。我们重试一下:
# Rewritten query - correct
mysql> SELECT ...
32a1894d773c9b85172969c659175d2d -
1 row in set (0.17 sec)
校验和是相同的,重写的查询很可能产生与原始查询相同的结果。
如果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命令能让你的工作事半功倍。
介绍一些有趣的MySQL pager命令的更多相关文章
- mysql中pager命令妙用
pager命令的妙用在mysql,可以大大提高工作效率. 一 当处理大量数据时,不想显示查询的结果,而只需知道查询话费的时间. mysql> select * from t3; +----- ...
- mysql pager用法&命令行命令
下面讲的命令,有部分只能在linux上才有.像pager命令windows上就没有了. 分屏:在Linux上,而且不是xwindow时,使用mysql命令行时,输出太多的东西,看不到就很悲剧了.在sh ...
- day39——SQL语句简单介绍、库、表、记录、安装mysql简单命令
day39 SQL语句简单介绍 库(增删改查) 查看数据库 show databases; 查看其中一个库 show create database db1; 创建数据库 create databas ...
- MySQL ALTER命令
当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令. 开始本文教程前让我们先创建一张表,表名为:testalter_tbl. root@host# mysql -u r ...
- MySQL 常用命令总结
http://blog.csdn.net/hanxin1987216/article/details/5976860 一.总结 1.Linux系统下启动MySQL的命令: mysqladmin sta ...
- 烂泥:mysql帮助命令使用说明
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 在安装.管理和使用mysql过程中,你是不是需要记忆很多的mysql命令.而且对于新手来说,很不多的命令不知道该如何应用,对于老手来说很多命令时间长了忘 ...
- Mysql常用命令行大全
第一招.mysql服务的启动和停止 net stop mysql net start mysql 第二招.登陆mysql 语法如下: mysql -u用户名 -p用户密码 键入命令mysql -uro ...
- mysql source命令超大文件导入方法总结
本文章来给各位朋友介绍利用mysql source命令超大文件导入方法总结,下面收集了两种解决办法,一种是把数据库分文件导出然后再导入,另一种是修改my.ini配置文件,下面我一一给各位朋友介绍. 导 ...
- Mysql常用命令行大全——转载
转载地址:http://www.blogjava.net/supperchen/archive/2012/10/11/389340.html 第一招.mysql服务的启动和停止 net stop my ...
随机推荐
- LightOJ 1118 - Incredible Molecules (两圆面积交)
1118 - Incredible Molecules PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit: ...
- HDU 4081 Qin Shi Huang's National Road System(最小生成树/次小生成树)
题目链接:传送门 题意: 有n坐城市,知道每坐城市的坐标和人口.如今要在全部城市之间修路,保证每一个城市都能相连,而且保证A/B 最大.全部路径的花费和最小,A是某条路i两端城市人口的和,B表示除路i ...
- 委托、Lambda表达式、事件系列01,委托是什么,委托的基本用法,委托的Method和Target属性
委托是一个类. namespace ConsoleApplication1 { internal delegate void MyDelegate(int val); class Program { ...
- C#高级编程小结
小结 这几章主要介绍了如何使用新的dynamic类型,还讨论了编译器在遇到dynamic类型时会做什么.还讨论了DLP,可以把它包含在简单的应用程序中.并通过Pythin使用DLR,执行Python脚 ...
- C#编程(五十三)----------字典Dictionary<TKey,TValue>
字典 关键字:Dicitionary 说明: 必须包含命名空间System.Collection.Generic Dictionary里面的每一个元素都是一个键值对(由两个元组组成:键和值). 键必须 ...
- 【Devops】【docker】【CI/CD】1.docker搭建Gitlab环境
CI/CD[持续化集成/持续化交付] docker搭建Gitlab环境 1.查询并拉取gitlab镜像 docker search gitlab docker pull gitlab/gitlab-c ...
- Reflector_8.3.0.93_安装文件及破解工具
Reflector_8.3.0.93_安装文件及破解工具 下载地址:http://pan.baidu.com/s/1jGwsYYM 约 8.9MB
- java nio 映射文件内容到内存
FileChannel 的一个最好的功能就是能将文件的某个部分直接映射到内存.这要感谢 FileChannel.map() 方法,这个方法有下面三个参数: mode:映射到内存需要指定下面三种模式之一 ...
- SharePoint 2013 workflows stop working (Failed on started.)
前言 最近,使用工作流的时候碰到了一个问题,突然间所有工作流都无法启动,报错Failed on started. 同时,工作流内部报错,工作流被系统账号取消了. 查了很久,发现系统打了windows ...
- Java并发编程的艺术(十一)——线程池(2)
Executor两级调度模型 在HotSpot虚拟机中,Java中的线程将会被一一映射为操作系统的线程. 在Java虚拟机层面,用户将多个任务提交给Executor框架,Executor负责分配线程执 ...