2020-02-01から1ヶ月間の記事一覧

SQLチューニング そもそもアナライズってなんでするんだ?

アナライズとか実行計画をとる、統計情報をとる など現場で結構聞くと思いますが、そもそもなんでとるんでしょうかね? ざっくりいうと、SQL文というのはselect対象のテーブルを参照する前に、 テーブルにどれくらいデータが入っているのかが蓄えられている…

SQLチューニング ゴミ箱掃除(Oracle)

deleteやdropしてもじつはDBの容量はあかないってことを知ってましたか? ゴミ箱領域に蓄えられて、完全に消えたりはしないんですよね。 ゴミ箱の確認 SELECT * FROM RECYCLEBIN; ゴミ掃除 PURGE RECYCLEBIN; 理屈は抜きで!

SQLチューニング すべてのテーブルアナライズ(PostgreSQL)

PostgreSQLにはすべてのテーブルを同時にアナライズする方法があるみたいですね。 ANALYZE; と実行するといけるそうな。 理屈は抜きで!

SQLチューニング アナライズ(PostgreSQL)

Oracleと違って単純ですね。 ANALYZE テーブル名; とりあえず、統計情報取っといてや、アナライズかけといて と言われたらこうしましょう。 理屈は抜きで!

SQLチューニング アナライズの高速化

前回とちょっと違うのですが、 アナライズ構文から並列度を加えたものがこちらです。 exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'ユーザ名', tabname => 'テーブル名' DEGREE=>'DBMS_STATS.AUTO_DEGREE'); 理屈は抜きで!

SQLチューニング アナライズ(Oracle)

意外とアナライズの構文ってすっとでてこないですね。 Oracleではこちら exec DBMS_STATS.GATHER_TABLE_STATS(ownname => 'ユーザ名', tabname => 'テーブル名'); 実はこの中にいろんなチューニングテクニックが入っていたりして。。。 理屈は抜きで!

SQLチューニング not in

存在しないことを確認って結構やることありますが、 なるべく使わないようにしましょう。 existsを使う、または、 not existsで代用 このほうがよいです。 理屈は抜きで!

SQLチューニング union

データが重複してもいいのであれば、unionではなく、 union allを使いましょう。 集約なくすのは、チューニングの基本かも 理屈は抜きで!!

SQLチューニング in句の中身

in句の中身って意外と気にしないかもしれませんが、 よく当たる順番にin句の中を書くと速くなりますよ。 理屈は抜きで!!

SQLチューニング is null

単純ですが、is nullはやめましょう。。。 EXISTSでどうにか乗り切りましょう。 理屈は抜きで!!

SQLチューニング between

大なり小なりでこの間を抽出したいときありますね =< >=とかで囲んだりしますが、 betweenのほうが速くなります。 理屈は抜きで!

SQLチューニング distinct

集約っていたる所で使うんですよね 注意することは、order byよりも、distinctを使った方が速いってことです! 理屈は抜きで!

SQL小手先の技 テーブル確認(PostgreSQL)

今DBにどんなテーブルが作成されているか確認したいときありますね。 そんなときはこれです。 PostgreSQL版 select * from pg_stat_user_tables; 理屈は抜きで!!

SQL小手先の技 テーブル確認(Oracle)

今DBにどんなテーブルが作成されているか確認したいときありますね。 そんなときはこれです。 Oracle版 select * from V$USER_TABLES; テーブル容量まで見れるので何かと便利 理屈は抜きで!!

SQLチューニング INDEX指定(PostgreSQL)

一つのテーブルにINDEXが複数作成されている場合、「このINDEXを指定したい」というときがありますね。そんなときのヒント句の書き方です。PostgreSQL版 /*+ IndexScan(テーブル名 インデックス名) */ 理屈は抜きで!

SQLチューニング INDEX指定(Oracle)

一つのテーブルにINDEXが複数作成されている場合、このINDEXを指定したいときがありますね。そんなときのヒント句の書き方です。Oracle版 /*+INDEX(テーブル名 インデックス名)*/ 理屈は抜きで!

SQLチューニング ネステッドループ(PostgreSQL)

以前にhashjoinをするのがはやいと言いましたが、たまにネスデッドループのほうが速い場合もあります。 ネスデッドループは行同士を一行ずつ結合する方法です。 ヒント句はこれです。PostgreSQL版です下のa bはそれぞれテーブル名です /*+NestLoop(a b)*/ 理…

SQLチューニング ネステッドループ(Oracle)

以前にhashjoinをするのがはやいと言いましたが、たまにネスデッドループのほうが速い場合もあります。 ネスデッドループは行同士を一行ずつ結合する方法です。 ヒント句はこれです。 Oracle版です下のa bはそれぞれテーブル名です /*+USE_NL(a b)*/ 理屈は…

SQLチューニング count

件数を確認するときって、countを使いますが、 count(*)ってなにげなく使ってませんか? ()の中は1を指定したほうがよいです。 select count(1) from テーブル名; って感じです。 理屈は抜きで!

SQLチューニング 存在確認(PostgreSQL)

存在チェックって、なにかとやりますよね。 そんな時は、以前紹介したlimitを使って、1件でも存在したら1を返却するようにしましょう。 こんな感じです! select 1 from テーブル名 limit 1; 理屈は抜きで!

SQLチューニング 存在確認(Oracle)

存在チェックって、なにかとやりますよね。 そんな時は、以前紹介したrownumを使って、1件でも存在したら1を返却するようにしましょう。 こんな感じです! select 1 from テーブル名 where rownum < 1; 理屈は抜きで!

SQLチューニング 実行計画からの改善案

実行計画ってよくわからないですよね。。。 おそいなあと思ったときに、INDEXの検索方法が「INDEX RANGE SCAN」で検索しているかどうかを確認してください。 「TABLE ACCESS FULL」、「INDEX UNIQUE SCAN」、「INDEX SKIP SCAN」だった場合、INDEXを見直した…

SQLチューニング Exists

存在チェックをするときに、inner joinを使っていませんか? 存在チェックだけだったら、inner join ではなく、where句の中でexistsで対応しましょう!! 理屈は抜きで!

SQLチューニング マテビュー

前回ビューにはINDEXが作成出来ないと言いましたが、マテリアライズド・ビューならINDEX作成できます! 更新がおそくなったりするのが厄介なんですけどね。。 理屈は抜きで!

SQLチューニング ビュー

ビューって便利ですね ですが、あいつの検索はINDEXが使えないので、遅いことがしばしば、、 性能を考えるなら、ビューは消しましょう! 理屈は抜きで!