Conversation
|
|
||
| 製造エネルギー事業部の辻です。ここ数年は PostgreSQL を中心に開発していましたが、最近 SQL Server(Azure SQL Database)を利用する機会がありました。 | ||
|
|
||
| 細かいところで、いくつか PostgreSQL と SQL Server で挙動が異なる点がありました。本記事では実運用を見据えた開発で役に立ちそうな少しディープなTipsをまとめました。 |
There was a problem hiding this comment.
🚫 [textlint] <eslint.rules.ja-technical-writing/no-doubled-joshi> reported by reviewdog 🐶
一文に二回以上利用されている助詞 "が" がみつかりました。
次の助詞が連続しているため、文を読みにくくしています。
- "が"
- "が"
同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
(ja-technical-writing/no-doubled-joshi)
|
|
||
| # 7. ロック挙動が PostgreSQL と異なる | ||
|
|
||
| SQL Server の悲観ロックは PostgreSQL よりもロックされる範囲が広くなりやすいため注意が必要です。 |
There was a problem hiding this comment.
🚫 [textlint] <eslint.rules.ja-technical-writing/no-doubled-joshi> reported by reviewdog 🐶
一文に二回以上利用されている助詞 "が" がみつかりました。
次の助詞が連続しているため、文を読みにくくしています。
- "が"
- "が"
同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
(ja-technical-writing/no-doubled-joshi)
|
|
||
| SQL Server の悲観ロックは PostgreSQL よりもロックされる範囲が広くなりやすいため注意が必要です。 | ||
|
|
||
| PostgreSQL の `SELECT ... FOR UPDATE` は、最終的に条件に一致した行だけをロックします。対して SQL Server で `WITH (UPDLOCK)` を用いた場合、条件に合う行をスキャンする途中で読み込んだ行にもロックが及ぶことがあります[^5]。そのため、PostgreSQL と同じ感覚で使うと、更新対象ではない行までブロックしてしまい、システム全体の並行性を下げるリスクがあります。 |
There was a problem hiding this comment.
🚫 [textlint] <eslint.rules.ja-technical-writing/no-doubled-joshi> reported by reviewdog 🐶
一文に二回以上利用されている助詞 "が" がみつかりました。
次の助詞が連続しているため、文を読みにくくしています。
- "が"
- "が"
同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
(ja-technical-writing/no-doubled-joshi)
| Azure SQL Database のデフォルト分離レベル (RCSI) | ||
|
|
||
| Azure SQL Database では、デフォルトで READ_COMMITTED_SNAPSHOT (RCSI) が有効になっています[^6]。これは PostgreSQL の MVCC と同様に読込が書込をブロックしない挙動です。Azure SQL Database ではこの設定により並行性が確保されています。ただし、明示的に `WITH (UPDLOCK)` を使用して悲観的ロックを行う場合は、上述のスキャン範囲によるロックの特性に留意する必要があります。 | ||
| ::: |
There was a problem hiding this comment.
🚫 [textlint] <eslint.rules.ja-technical-writing/ja-no-mixed-period> reported by reviewdog 🐶
文末が"。"で終わっていません。
理由: 句点は文の境界を明確にし、読み手の理解を助けます
修正: 適切な文末表現で文を完結させ、句点を追加してください
例: 「〜です。」「〜ます。」「〜でした。」など (ja-technical-writing/ja-no-mixed-period)
|
|
||
| # 9. `WITH` 句はマテリアライズされず、複数回参照すると都度計算される | ||
|
|
||
| PostgreSQL では、`WITH` 句を定義してメインクエリ内で同じ CTE を複数回参照した場合、既定ではマテリアライズされるため 1 回しか計算されません[^11]。そのため、重い処理を `WITH` 句に切り出して再利用するテクニックが有効な場面があります。 |
There was a problem hiding this comment.
🚫 [textlint] <eslint.rules.ja-technical-writing/no-doubled-joshi> reported by reviewdog 🐶
一文に二回以上利用されている助詞 "が" がみつかりました。
次の助詞が連続しているため、文を読みにくくしています。
- "が"
- "が"
同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
(ja-technical-writing/no-doubled-joshi)
|
|
||
| 一方 SQL Server における `WITH` 句はインラインビューとして扱われます。結果セットは物理的に保持されないため、メインクエリ内で複数回参照すると、その回数分だけ元テーブルへのスキャンや再計算が行われます[^12]。 | ||
|
|
||
| PostgreSQL の感覚で重い処理を 1 回で済ませる目的で `WITH` 句を多用すると、SQL Server ではかえって遅くなることがあります。複数回参照する重い処理がある場合は、`WITH` 句ではなく一時テーブル(`#temp` テーブル)に結果を格納するなどの代替アプローチを検討するのが安全です。 |
There was a problem hiding this comment.
🚫 [textlint] <eslint.rules.ja-technical-writing/no-doubled-joshi> reported by reviewdog 🐶
一文に二回以上利用されている助詞 "で" がみつかりました。
次の助詞が連続しているため、文を読みにくくしています。
- "で"
- "で"
同じ助詞を連続して利用しない、文の中で順番を入れ替える、文を分割するなどを検討してください。
(ja-technical-writing/no-doubled-joshi)
…たかった実践Tips10選.md Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
No description provided.