单行查询下 ksql 自动用了竖排展开;多行查询 ksql 判断终端宽度够用,直接输出横排表格。
\x auto 的判断依据是当前终端宽度,不是字段数量。同一张表,终端窗口调窄 ksql 更倾向于展开,调宽相同查询可能回到横排。MySQL 里没有这个模式,\G 每次都要手写在 SQL 末尾。
\timing 显示执行耗时
关掉展开模式,开启计时:
\timing 开启后提示 Timing is on,每条 SQL 执行完都会跟着一行 Time: x.xxx ms。
MySQL 里看执行耗时通常需要 show profiles 或者借助客户端工具,ksql 里 \timing 打开以后自动附在每个结果后面,不用额外操作。
但 \timing 给的是客户端侧的壁钟时间,包含网络往返和客户端处理,只适合粗粒度判断某条查询快不快。精确分析 SQL 是否走了索引、各执行节点耗时分布,要用 EXPLAIN (ANALYZE, BUFFERS),不能把 \timing 当性能分析工具来用。
\pset border 调整输出边框
关掉计时,演示三种边框样式:
\timing off
默认边框(border 1):
\pset border 1
select order_no, user_name, status, amount from t_meta_demo limit 3;
无边框(border 0):
\pset border 0
select order_no, user_name, status, amount from t_meta_demo limit 3;
双线边框(border 2):
\pset border 2
select order_no, user_name, status, amount from t_meta_demo limit 3;
三种样式的差别:
border 1:列之间用 | 分隔,标题行下有 +---+---+ 形式的分隔线,是默认样式
border 0:去掉所有分隔符,列之间只有空格,标题和数据之间用短横线对齐
border 2:整个结果集外面加一圈完整边框,顶部、底部、标题和数据之间都有分隔线
\pset border 只改显示格式,不影响数据,切换后立即生效。MySQL 客户端输出的边框样式固定,ksql 这里可以按需调整。border 0 在把终端输出粘贴进文档时最有用,不用手动清格线。演示完以后恢复默认:
\o 把输出写进文件
在交互会话里把查询结果重定向到文件,不需要退出去用 shell 重定向:
\pset border 1
\o /tmp/ksql-output.txt
select order_no, user_name, status, amount from t_meta_demo;
\o
\o /tmp/ksql-output.txt 打开后,ksql 不再把查询结果输出到终端——select 执行后提示符直接回来,没有任何表格输出,结果都写进了文件。\o 不带参数,关闭重定向,恢复终端输出。在另一个终端用 cat /tmp/ksql-output.txt 可以看到全部五行数据,和直接在终端查的结果一致。
有一个坑容易踩:关闭重定向必须用 \o 不带任何参数。忘了关的话,后续所有查询输出包括元命令的提示都会继续写文件,终端里什么都看不到,很容易以为命令没执行。MySQL 里在交互会话内导出结果通常要借助外部工具,ksql 里 \o 可以直接在会话内切换,用完记得关。