@kyanny's blog

My thoughts, my life. Views/opinions are my own.

mysql クライアントでページャを使う

mysql クライアントでクエリを実行すると結果が印字されるが、結果をファイルにリダイレクトしたり、表示せずに捨てたいことがたまにある。 SELECT INTO OUTFILE を使ってもいいけれど、 mysql サーバに接続するユーザーに FILE 権限が付与されていないこともある。そんなときはページャを指定するといい。

ページャはコマンドラインオプションから指定することも、プロンプトに入ってからコマンドで指定することもできる。 http://dev.mysql.com/doc/refman/5.1/ja/mysql-command-options.htmlhttp://dev.mysql.com/doc/refman/5.1/ja/mysql-commands.html にリファレンスがあるが、抜粋すると、

# コマンドラインオプションで指定
$ mysql --pager='cat >/dev/null'

# mysql プロンプトからコマンドで指定
mysql> pager cat >/dev/null

mysql プロンプトからコマンドで指定する場合はクォートが不要なことに注意。

せっかくクエリを実行した結果を捨てたいことなんてあるの?と不思議に思うかもしれないが、例えばクエリのチューニングを行うときに便利なことがある。 SELECT * FROM ... のようなクエリでフェッチする行が多い場合、クエリの実行は終わっているのに表示が完了するまで待たされるのはかったるい。 EXPLAIN で確認するのはもちろんだけど、行をディスクから読み込む I/O 操作まで含めた実行時間を知りたければ、クエリを実行してみるしかない。ページキャッシュに載るから二度目以降はあんまり有意な結果にならないとか、もっと細かい話はいろいろあるけど、ブログ書きたかったんだからまぁいいじゃない。