GeekBox

IT系エンジニアの雑記

【MySQL】コマンドラインツールでDBを指定したときに時間がかかる時の対処法

スポンサーリンク

対処法

mysql -u hoge -p -h192.168.0.1 db_name

等のコマンドでmysqlに接続しようとした場合に テーブルがやたら多いDBをuseしようと思ったら結構遅い時がある。 何秒たってもuseが終わらないような場合は-Aオプションをつけるとよい。

mysql -A -u hoge -p -h192.168.0.1 db_name

-Aオプションは --no-auto-rehashのショートカットである。 --auto-rehashはデフォルトで有効になっており、rehashというのは補完機能の事である。 テーブル名をTABキーなどで補完してくれるのだが、これが有効だとクエリログ等を見てみると分かるが接続時にすべてのテーブル情報を読み込むので、DBによってはかなり時間がかかる。 この補完機能をOFFにするのが--no-auto-rehashとなる。 また同様のオプションとして以下が存在する。 --skip-auto-rehash --disable-auto-rehash

--auto-rehashが有効な状態で接続すると、以下の文言が出てくるが

Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A

テーブル名とカラム名の補完のためテーブル情報を読み込む。 -Aでこの機能をOFFにすれば起動を早くできる。

とのこと。

永続化

毎回このオプションを使うなら永続化したほうが良いので、 my.cnfの[mysql]セクションに以下を追記する。

[mysql]
no-auto-rehash
#もしくは
skip-auto-rehash
#もしくは
disable-auto-rehash

接続後に補完機能を使いたい場合

rehashコマンド、もしくはrehashのショートカットの#を入力すると使えるようになる。

mysql>rehash