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

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

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

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

Q&A

解決済

6回答

14290閲覧

【MySQL】リレーションは遅くなるからなるべく使わない

tomoyuki123

総合スコア273

MySQL

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

0グッド

1クリップ

投稿2017/04/09 14:29

掲題のようなことを言う人がいます。
RDBSでリレーションを使わないのは正直意味がわからないです。

リレーションを使わなくても遅いクエリはあると思いますし
チューニングや発行するクエリ次第でなんともなると思っています。

リレーションが嫌ならmongoでも使ってればいいじゃんって言ってしまったのですが
掲題のようなことに根拠はあるのでしょうか?

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

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

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

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

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

guest

回答6

0

ベストアンサー

設計やチューニング次第です。
Oracleで新橋のソフトウェア会社がSQL, PL/SQLの熟練者をひとりも使わないで素人だけで作ったシステムでした。50何時間かかっていたバッチがまったく使い物にならないので、SQL, PL/SQLを全部作り直して5時間ちょっとにしたことがあります。

投稿2017/04/09 23:24

Orlofsky

総合スコア16415

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

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

tomoyuki123

2017/04/10 03:03

皆様ありがとうございました!
guest

0

リレーションというのが外部キー参照のことであると解釈します。
(maisumakunさんおっしゃるとおり、リレーションというのはRDBにおいてはテーブルを意味します。外部キー参照のことではありません)

以前、外部キーNightというイベントで登壇したことがあります(以下のURLはその聴講レポートの一つです)。
http://makopi23.blog.fc2.com/blog-entry-163.html

私は最後のLTで外部キーのTIPSを話しただけなんですが、他の演者の方は大体結論として「結局外部キー使っていない」が多かったですね…
他の演者の方が、株式会社はてなの中の人とかなんで扱っているデータ量が膨大で、それで本当にパフォーマンス上の問題で使うわけにいかないという状況のようなんですが、kamipo氏のまとめの最後の方にある通り、根本的にはMySQLの外部キー参照の仕組みが未熟だからというのがありそうです。

  • 外部キーを張っているとエントリ削除時に関連する削除がどの程度発生するか予測がつかないことになる(そしてそれはシステムを無応答にする)
  • 外部キーを張っているとシャーディングができない
  • 外部キーの参照整合性チェックがステートメントごとに行われる(トランザクションの最後にまとめてチェックでない)ので単純に重い

投稿2017/04/10 00:51

編集2017/04/10 00:55
yuba

総合スコア5568

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

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

0

大抵のSQLの教科書には、データを管理するには正規化しろとしか
書いてないですよね
でも良心的なものだと正規化は必ずしも高速化にはつながらないと
注記されているものもあります。
検索や集計だけを考えれば正規化しないほうが有利なことが多いでしょうけど
正規化しないテーブルは冗長で肥大化しますし、特定のデータの修正により
他のデータの修正が必要になったりデータ管理が煩雑になったりします。

投稿2017/04/10 00:24

yambejp

総合スコア114843

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

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

0

リレーションといっているのが foreign key のことであるならば、そういう可能性はあることはあります。
foreign key の insert/update/delete ではキーの存在チェックが走りますから、その手間分だけ遅くはなります。

投稿2017/04/09 15:31

tacsheaven

総合スコア13703

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

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

0

データをリレーションさせないなら、NoSQLのほうが適切かもしれません。

RDBMSはRelational Database Management System(関係データベース管理システム)の略です。

投稿2017/04/09 22:07

maisumakun

総合スコア145184

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

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

0

確かに良くわかりませんが
一気に更新することが考えられるアプリケーションの場合にポリモーフィック関連よりはそうでない方がいいよなとか思って実装したことはあります
数万件一気に更新するといったケースでは気にするくらいの事案だと思います

投稿2017/04/09 14:58

takeotakeo

総合スコア58

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問