アーカイブ:2021年 10月
-
【MySQL】サブクエリの種類
10.31
MySQLのサブクエリはよく遅いと言われます。実行計画のselect_typeを見れば分かります。 SUBQUERY DEPENDENT SUBQUERY DERIVED 結論から言えば遅いのは「DEPENDEN…
-
OracleとMySQLではロックの動きが異なります。 MySQL JOINした際にJOIN対象のテーブルの行を全てロックするため、Oracleに比べるとロックの範囲が広いので競合が起こりやすい。 技術的には「FOR UPDATE…
-
【SQL】INとEXISTS、JOINの違い
10.30
よく、EXISTSの方が速いのでEXISTSを使うべきと言われていたりしますが、それは間違いです。用途に合わせて使っていくのが正しい使い方になります。 結論 いろいろ調査してみた結果、以下のような使い分けが良いでしょう。 [crayo…
-
条件の違いによって何度もUPDATE文を発行してしまうのは以下のデメリットがあるのでアンチパターンになります。 インデックスが効かないケースもあり性能が悪くなる。 前のUPDATE内容が後続のUPDATE内容に影響を与えてし…
-
LEFT JOINにON句を使って抽出をすればINNER JOINと同じように使うこともできます。なので、開発現場によっては「LEFT JOINのみを使うこと」とルールを決めている現場もあるようです。 ただ、これは以下の理由によりあま…
-
【SQL】「ON句」の意外と知らない活用法
10.24
JOINのON句は以下のように結合条件のために普通は使うと思います。 [crayon-63e15f0177f5a563769109/] それで結合後に条件を絞りたい場合は、以下のようにするでしょう。 [crayon-63e15f017…
-
【SQL】SQL設計の基本指針
10.24
基本指針 「複雑なSQL」から逃げないこと 複雑なSQLは避けたがる現場もあるかもしれません。しかし、複雑なSQLを使わないとループからのDB呼び出しの多重ループが発生するため、アプリの性能が遅くなってしまいます。複雑なSQLから逃げな…
-
【設計】「リトライ」についての考え方
10.23
リトライのユースケース バッチ処理などでどうしても失敗できない処理の場合 バッチ処理はオンライン処理に比べたら同時処理数は一定のため過負荷などにはなりにくいです。 リトライの注意点 回数の多いリトライは過負荷を生む原因になるのでやっ…
-
【DB設計】「データ保持」の考え方
10.23
デメリット データ量が増えてくると性能が低減する。 削除しないのであれば、ストレージやディスクを追加購入する必要がある。(今はクラウドなので論理的なものになるが。) しょうがないケース 以下のようなケースはそもそもデ…
-
【DB設計】日付データの持たせ方
10.23
DATETIME型で時間まで持たせる方法 基本的にこれで統一するのが一般的です。 文字列で持たせる方法 これも一つの手ですが、妥当性を確実にチェックできないので、13月だとか、32日だとか登録されるはずがないデータまで登録できてしまう…