簡単な質問:DBをウォームアップするcomeコマンドを作成しました。事はそれらの選択が大きいということです。このような選択を行うと、「jiba-jaba」がすべてターミナルウィンドウに表示されます。どのようにしてmysqlに選択を「静かに」させることができますか?私の端末にすべてのがらくたを印刷するのに年齢をかけずに?
シェルのI/Oリダイレクト演算子を使用して、MySQLだけでなく、任意のコマンドの出力をリダイレクトできます。たとえば、bashの場合:
$ mysql mydb < commands.sql > /dev/null 2>&1
これにより、MySQLコマンドラインクライアントが起動し、ローカルシステムの "mydb"に接続し(アクセス権がある場合)、SQLコマンドをcommands.sql
ファイルから読み取り、すべての出力を/dev/null
にダンプします。
事後の確認のために出力を保存したい場合は、/dev/null
ではなくファイルにリダイレクトできます。
$ mysql mydb < commands.sql > output.txt 2>&1
2>&1
はstderr
およびstdout
をリダイレクトします。端末でエラーを確認したい場合は、stdout
のみをリダイレクトします。
$ mysql mydb < commands.sql > /dev/null
mysql-client:
mysql> pager > /dev/null
PAGER set to '> /dev/null'
mysql> select 1;
1 row in set (0.00 sec)
mysql> \q
Bye
この方法では、クエリの結果は出力されず、行のみがタイミング情報をカウントします。
シェルでのIOリダイレクト
user@Host$ mysql -e 'select 1' > /dev/null
user@Host$
目的がキャッシュのウォームアップである場合、次のようなこともできます:
select my(concat(col1、col2))from mytable where ...
エンジンは、実際のページを読み取って最大値を計算することを強制されます(とにかく、I/Oに関連するオーバーヘッドはほとんどありません)。
インデックスから列のみを選択すると、インデックスのみが赤になり、テーブル自体(「カバーインデックス」)に移動する必要がないことに注意してください。
場合によっては、まさにそれが必要になるかもしれません(キャッシュにインデックスのみをロードします)
これは、mysqlのUnixインストールで動作しています。 Windowsのmysqlインストールには/ dev/nullもページャーコマンドもないため、Windowsにインストールされたmysqlでは機能しません。
Windows Mysql(Unixの場合も)では、SELECT 1 INTO OUTFILE 'file_name'を使用するか、変数を設定してSELECT 1 INTO @varを使用できます。こちらのドキュメントをチェックしてください: http://dev.mysql.com/doc/refman/5.0/en/select.html
INTO Outfileは繰り返し選択に対して機能しないため、出力ファイルを上書きすることはできません。