質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

意見交換

3回答

644閲覧

7テーブル以上を結合すべきでない、という話について

shisyamo912

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

1グッド

2クリップ

投稿2025/05/15 12:18

7テーブル以上結合したらダメ?

OracleDBにおいて、「7テーブル以上を結合するとパフォーマンスが悪化する」という話があります。

自分はOracleの公式ブログ(?)記事で知りました。
津島博士のパフォーマンス講座 第24回 良いSQLについて(3)

しかし、そこそこの規模のシステムなら7テーブル以上を結合することなんて頻繁にあると思います。

たった7テーブルでオプティマイザの限界が来るなんてちょっと信じられない仕様ですし、解決法として「できれば多くても6個までになるように、データベース設計をするようにして下さい」なんてテーブルの非正規化を推奨するようなことが書かれているのはもっと信じられません。

テーブルの非正規化についてはほとんどのDBエンジニアの考え方に反すると思っています。

聞きたいこと

①上記のブログは2013年の記事ですが、Oracleは今でもこの仕様で動いているのでしょうか?

②この仕様について記された公式ドキュメントはあるのでしょうか?

③MySQLやPostgreSQL等にもこのような結合テーブル数に関する限界値があるのでしょうか?

知りたいことは以上3点です。

他にもこの仕様について知っていることや意見等あればどんなことでも教えてくださると嬉しいです。

tanat👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

回答3

#1

YT0014

総合スコア1819

投稿2025/05/16 00:51

検索結果より関連しそうな記事を

Oracle Database 23c Free Developer Releaseの”_optimizer_max_permutations” parameterの設定値について より
「たまたま気づいたのですけど、 Oracle Database 23c Free Developer Release で、
under scored parameterの "_optimizer_max_permutations" って、 300なんですね。随分少ない設定にされていました。」

最新のOracleに関しては、_optimizer_max_permutationsの実際の値を確認されることをお勧めします。

また、2009年以前の記事のようですが、Oracleからも、結合を6テーブル程度に収めることを推奨する記事が出ております。
門外不出のOracle現場ワザ

個人的な意見としては、結合が多すぎる場合は、SQLの分割を検討するのが先かと。
レコード数が小さいマスタ系の場合、コード側でHashMapなどで保持しておくほうが、速度的に有利な場合があります。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#2

yambejp

総合スコア117717

投稿2025/05/16 03:36

まぁoracleということであれば職業的なオラクルマスターがテクニックを駆使してチューニングするようなビジネスモデルでしょうから、あまり気にしても仕方ない気がします。そもそも結合すること自体パフォーマンスを犠牲にするわけで、正規化はかならずしも高速化のためのテクニックではないですから。
とはいえできる範囲で高速化を図りたいということであれば、オプティマイザが判断できる範囲でサブクエリーなどで集計、抽出しておき、そこにマスターデータなどを繋げば、負荷の高い部分は解消されるのでマスターデータの参照など最適化されていなくてもさほど気にならないかもしれません。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

#3

68user

総合スコア2046

投稿2025/05/16 07:37

7テーブル以上を結合する場合は、ベストな実行計画にならないときがありますので、ヒント文を入れるなどのチューニングが必要な場合があることを知っておきましょう(できれば多くても6個までになるように、データベース設計をするようにして下さい)。

という文章を読んで「テーブルの非正規化を推奨するようなことが書かれている!」と思うのっておかしくないですか?

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

この意見交換はまだ受付中です。

会員登録して回答してみよう

アカウントをお持ちの方は

関連した質問