2020-03-01から1ヶ月間の記事一覧
そういえば、どのテーブルとどのテーブルが結合できるか調べるときに、DBのカラム名調べることありませんか?そんなときは、ALL_TAB_COLUMNSというテーブルを参照しましょう。Oracleではこんな感じ SELECT * FROM ALL_TAB_COLUMNS; COLUMN_NAMEで絞り込みを…
以外と忘れがちなのが、エスケープいや、シングルクォート(')ってことは知ってるんですが、そもそもシングルクォート(')を表示するときはどうするんだっけ?ってなるんですよね。 こんな感じですね。 select 'テスト''ここがシングルクォート''テスト' from …
ふと使おうと思ったときにふと忘れてしまうので記載しておきます。 EXISTSの使い方はこう select * from 対象テーブル a where exists (select 1 from 存在確認対象テーブル b where a.対象カラム = b.対象カラム) 理屈は抜きで!
RWが基本になりつつある今 ハッカー集団が盛んに活動してるみたいです。 皆さん注意が必要です。 悪意のある実行ファイルを添付してそれを実行するとPCが乗っ取られるとか ○○に課金したようなのでこちらURLから確認して下さいといって悪意のあるサイトに誘導…
営業日問題って、地味に直面しませんか?いったん土日だけ考えてみたので参考になればと思います。Oracleで書いてみました。 to_char(SYSDATE, 'D'),(case when to_char(SYSDATE, 'D') = 6 then SYSDATE + 3 when to_char(SYSDATE, 'D') = 7 then SYSDATE + …
バージョン確認SQLのMySQL版です。 select version(); なんとまたPostgreSQLと同じ!! 理屈は抜きで!!
バージョン確認SQLのPostgre版です。 SELECT version(); Postgreはも9と10で大分使えるSQLが変わってくるので、意外と使うことが多いかもしれないですね。 理屈は抜きで!
意外と自分がかかわっているDBのバージョンって忘れがちで確認する資料は見つからないですよね。そんなときにSQLでバージョンを確認できることを覚えておくと便利です。Oracleはこんな感じ。 select * from v$version; 理屈は抜きで!
実行計画の取得方法MySQL版です。。こんな感じです。 EXPLAIN 実行したいSQL; ま、Postgreと同じってことですね。 理屈は抜きで!
実行計画の取得方法Postgre版です。。こんな感じです。 EXPLAIN 実行したいSQL; 理屈は抜きで!
そもそも基本中の基本なんですが、実行計画の取得方法を紹介してなかったですね。Oracleはこんな感じです。 EXPLAIN PLAN FOR 実行したいSQL; A5Mk2とか使うなら、ctl + e でも取得できますけどね。 理屈は抜きで!
先日書いた前方一致については、SQLだけじゃなく実はシステム全般に言えるんですね。 使い方はちょっと大変なんですが、AWSのS3チューニングでよく使います。 やり方は、S3に格納するときにプレフィックス(前方)に適当なランダム文字列を付与することで、S3…
そういえば、基本的なことを記載していなかったです。 LIKEを使っていて、地味にやりがちなミスですが、前のほうに%(ワイルドカード)を書いてしまうこと。 ワイルドカードは後ろに記載するようにしましょう。 こんなかんじ。 select * from テーブル名where …
oracleのin句の1000件問題のまとめです。 その1・・・with句で仮想テーブルを作成するその2・・・orで区切るその3・・・仮想テーブルを作成するその4・・・1000件のまま何回も実行するその5・・・EXISTS句にするその6・・・inner joinするその7・・・複合問…
oracleのin句の1000件問題の続きです。 前回EXISTSだったので、今回はそう、結合ですね。若干その3で紹介した方法と似てます。 こんな感じ。 結合する前(エラーになる)select * from テーブル名where 検索対象カラム in (select 検索対象カラム from 別テー…
oracleのin句の1000件問題の続きです。 前回EXISTSだったので、今回はそう、結合ですね。若干その3で紹介した方法と似てます。 こんな感じ。 結合する前(エラーになる)select * from テーブル名where 検索対象カラム in (select 検索対象カラム from 別テー…
oracleのin句の1000件問題の続きです。結構1000件問題の回避策って出てくるものですね。ちょっとびっくりしてます。どこかでまとめます。 今度はEXISTS句を使う回避策です。 こんな感じ。 EXISTS句にする前select * from テーブル名where 検索対象カラム in …
oracleのin句の1000件問題の続きです。 いろんな制約があって、SQLを組み替えられないとき。あきらめて、何回も1000件のin句をいれた状態で実行しましょう。 こんな感じ。 --1回目select * from テーブル名where 検索対象カラム in ('1', '2', ・・・・, '10…
oracleのin句の1000件問題の続きです。 もはややっていいのかわかりませんが、in句の中身をwkテーブルみたいなものにくっつけて結合させましょう。こんな感じ。 select * from テーブル名inner join in句の中身のテーブル on a.検索対象カラム = b.検索対象…
検索対象テーブルがものすごく大量データで、検索に時間がかかる場合、テーブルの断片化が発生している可能性があります。 そんなときには、これを実行してください。 ALTER TABLE 対象テーブル MOVE; 注意点は、システム稼働中にやらないことです。 理屈は…
oracleのin句の1000件問題の続きです。 単純で、orで1000回以上つなぎ続けると、 意外といけます。 ダサいですが。。。 こんな感じ select * from テーブル名 where 検索対象カラム = 'aaa' or 検索対象カラム = 'bbb' 理屈は抜きで!
Oracleのin句って、1000件しか入らないんですよね。。。 結構1000件以上検索することがあるかと思うので、回避策でもつらつらと with句にin句の中身を入れて検索 こんな感じ with kensakutaisyou_tbl as ( select 'aaa' as kensakutaisyou from dual union a…
VACUMEの後は勝手にANALYZEが実行されるので、 わざわざ実行する必要はないですよ 理屈は抜きで!
PostgreSQLは結構便利で、一気にVacumeを実行できるんですよね。 VACUUM; 前回との違いはテーブル名を指定しないことですな。 理屈は抜きで!
意外と忘れがちですが、不要領域の削除は定期的にやる必要がありますね。 VACUUM テーブル名; 理屈は抜きで!
間違ってdropしたとき、絶望しかないですよね。。。 そんなときは、 FLASHBACK TABLE テーブル名 TO BEFORE DROP; データの中身も復旧するのでご安心を 理屈は抜きで!