18
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

IntelliJ IDEA の Database Tool Windowはいいぞ

Posted at

IntelliJ IDEA の試用に手を上げる人が少なかったら、コードほとんど書かない老人けど参加するよーと、言ってたら、本当に試用ライセンスが回ってきました。

Java は3Q成果が実質2行、4QはDBリファクタリングした結果Java成果行数は負数になってて1日の作業時間の大半はIDEじゃなく、AWSコンソール、Mackerel、AppDynamics、ターミナルの人です。

Database Tool Window

View | Tool Windows | Database

これで、PostgreSQLはもちろん、Oracle, SQLServer, MySQL, SQLite, Amazon Redshift まで接続してpgAdminのように VisualでDB操作できます。

気に入ったところ

  • デフォールトでページネーション入ってる
    • 50行だったか500行だったか もちろんどこかで設定可能
    • うっかり巨大な結果が返ってくるSQL投げても割とすぐに制御を取り戻せる
  • pgAdminIII が1000万行級Tableのprefetchだかなんだかで、分単位で固まってたのが、ストレスフリーに
    • 同じ接続先なので、サーバ側性能差はまったくなし
    • クライアント側の「作りこみ」の問題でしょうね
  • ちょっとSQL書いてみても、補完アシストがかなりいい感じ

Monster Query Hunter に IntelliJ IDEAを持たせると

Monster Query Hunter を書いたのが1年以上前になりました。現代的な道具を手にすると、どんなハンティングになるのか、見ていただきましょう。

AppDynamics で SlowSQL をみつける

AppDynamics で Database Calls | Slowest Database Calls に行けばすぐ採取できます。
1年前のはPostgreSQLログから採取してました。

appdyna_chu_slow_sql.png

appdyna_chu_slow_sql2.png

IntelliJ IDEA Database Consoles にペースト

長いSQLにたくさんパラメータが混じってますが気にしない。そのまま貼り付けます。

intellij_chu_slow_sql1.png

SQLフォーマッタ

Code | Reformat Code
intellij_chu_slow_sql2.png

リフォーマット後
intellij_chu_slow_sql3.png

Beautiful! 圧倒的な見通しの良さ!

SQL部分実行・パラメータ化された文の実行

Long Long query なのでいきなり全部を理解しようとはしません。まずは最初の WITH句です。
選択した範囲だけを実行できます。

そこにパラメータ置換文字が入っていたら対話的に聞いてくれます。

「published? 日付かな?」と入れて見た図
intellij_chu_slow_sql4.png

下のOutput にエラーが出ちゃった。

[2019-02-15 17:32:50] [22P02] ERROR: invalid input syntax for integer: "2019-02-15"
[2019-02-15 17:32:50] ポジション: 43

この列はinteger なんだ。でも、値域がわからない。ぼくの作ったTableじゃないから。
助けてよ~ IntelliJ~

クイック評価

しかたないな~ 「クイック評価~」
Table名のところをポイントして、Ctrl+Alt+F8
intellij_chu_slow_sql5.png

textbook から実際に2行取り出したポップアップが出てくれる。ここの published を見れば、4桁西暦だってわかるだろ。

ポップアップのMoreを使えばもう少しサンプル増やすこともできる。

Explain to Table

PostgreSQLの EXPLAIN <sql> の出力は、アプリケーションエンジニアのための実行計画 にあるように、インデントされて、文字列、数字が一杯のもので、人間に読みやすいものではありません。

IntelliJでもRaw出力だとこうです。
intellij_chu_slow_sql8.png

いやまあ、コンテキストメニュー(右クリック)からSQLの一部でも全体でもさくっと EXPLAIN が採取できるのは有り難いんですが、とくに Long Long queryの場合の結果を読むのは辛い。

それが Explain Plan (Raw) じゃなくて、Explain Plan の方を使うとこうなるのです。
intellij_chu_slow_sql7.png

Beautiful!
Rows と Cost が表形式に整列されて、比較が一瞬のうちにできる。どこが律速しているか一目瞭然。
おまえや、このNestedLoopJoinの5連発!

※この機能は中国地方DB勉強会 in 岡山(2019-02-02)で教わりました。
https://speakerdeck.com/maepon/sqlturu-number-chugokudb?slide=23

結論

MUST BUY

DBAにとっても、IntelliJ IDEA はおっそろしく有用なToolです。
「統合開発環境」IntelliJ IDEAは、これまで使ってた Eclipse + SourceTree + pgAdmin が1つになって、ツール切り替えに伴う、人間の頭のスイッチング時間がなくなります。なくなって初めて、ここにストレスかかってたんだと気がつきます。
一度試用したら、これなしの仕事には戻れません。
試用ライセンスが万一失効してライセンス貸与されなかったら、IntelliJ IDEA のある環境に移ることを考え出すくらいには。

(追記)無事、試用ライセンスから、正規ライセンスにしてもらえました。

18
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?