在数据库中针对SQL语句进行优化时,经常需要反复执行语句,查看执行效率、成本等。如果语句输出内容较多,不仅会刷屏,而且需要等待时间较长。这里介绍给大家一个小技巧,可做到只查询而不输出。
1.方法 — 使用BLACKHOLE引擎
BLACKHOLE是MySQL支持的一种引擎,从它的名字就可以看出,它是一个“黑洞”。下面通过示例,让我们体会一下它的使用。
(1).查看是否支持BLACKHOLE引擎
mysql> show engines;
. . .
BLACKHOLE dev/null storage engine (anything you write to it disappears)
(2).创建临时表结构
mysql> create table tmp_result as selectd.dname,e.empno,e.ename from big_dept d ignore index(`primary`),big_emp e ignore index(`fk_deptno`) whered.deptno=e.deptno and 1=0;
(3).转换存储引擎
mysql> alter table tmp_result engine blackhole;
mysql> show create table tmp_result;
CREATE TABLE `tmp_result` (
`dname`varchar(14) DEFAULT NULL,
`empno` int(4)NOT NULL,
`ename`varchar(10) DEFAULT NULL
) ENGINE=BLACKHOLE DEFAULT CHARSET=latin1 |
(4).执行查询
mysql> insert into tmp_result selectd.dname,e.empno,e.ename from big_dept d ignore index(`primary`),big_emp e ignore index(`fk_deptno`) whered.deptno=e.deptno ;
(5).删除临时表
mysql> drop table tmp_result;
2.方法 — pager命令
除了上面方法外,还可以使用MySQL内置的pager命令,达到上述目的。这个命令相当于在执行结果后,通过pager调用类似管道功能,重定向到其他应用。
(1).示例
mysql> select * from cly;
+-----+--------+-------+-----+------+---------------------+
| id | number |name | aaa | bb | c_time |
+-----+--------+-------+-----+------+---------------------+
| 2 | 100 | aaa | 0 | 0 | 0000-00-00 00:00:00 |
...
| 312 | NULL |haha | 0 | 0 | 2012-12-14 15:59:53 |
+-----+--------+-------+-----+------+---------------------+
mysql> pager cat > /dev/null
PAGER set to 'cat > /dev/null'
mysql> select * from cly;
29 rows in set (0.00 sec)
(2). 取消不显示
mysql> \P