No.2ベストアンサー
- 回答日時:
>100万行のテーブルのビューを作っても、ハードディスクを全く消費しない
DB格納スペースとしてはそうですが、ビュー経由で検索したときにORDER BY、GROUP BY、DISTINCTなどを行いソートが発生すれば、当然、作業用のメモリが消費されます。また、インデクスのキー以外の列を検索したり、ジョインでインデクスを有効利用できなければ、やはり作業用のメモリが消費されます。
作業用のメモリは、一時的なファイルとして、OSやRDBMSによりHDDに吐き出されることはあります。
>テーブルをJOINしたVIEWを作ったとき、そのVIEWがSELECTされる度に、毎回JOINするので、パフォーマンスアップにはならない
「ビューを経由したから」という意味では、性能改善には直結しません。
ただし、よく利用される検索パターンであったりして、DBバッファ上にデータが残っていて、結果的に実I/O減になることはあるかも知れません。
また、TEXT型やBLOB型などは、1行の情報が物理的には複数行に分割して格納されるので、ビューを経由することで、「不必要にそういった列を操作する」といった無駄は省けるかも知れません。
100万件規模のデータから、ジョインして絞り込んだ結果を、Webサービスで頻繁に利用するなら、絞り込んだ結果を実体のある表に格納しておけばどうでしょうか?
当初考えていた「ビューでジョイン」ということは、「そのビュー経由では更新しない」ということ(多くのRDBMSの制限で、MySQLも同じ)になりますから。
データの反映間隔、反映方法などの検討が必要になりますけどね。
ありがとうございました。
上記のご回答、完璧には理解していませんが、なんとなく(75%ほど)は理解しました。
> 絞り込んだ結果を実体のある表に格納しておけば・・・
それは、同じデータを別々のテーブルに重複して登録するということでしょうか?
もしそうであれば、いわゆる正規化というのは、実際の業務では理想にすぎないということでしょうか?
実務経験に乏しくて、他の方がどのようにしてるのか、想像がつきません・・・。
ともかく、ご回答ありがとうございました。
VIEWはテーブルのコピーではないということは分かりました。ありがとうございます。
No.3
- 回答日時:
>もしそうであれば、いわゆる正規化というのは、実際の業務では理想にすぎないということでしょうか?
業務で通常使用するテーブルは、当然、正規化します。
大規模なシステムでそれらのテーブル群を直接、多量のユーザから参照、更新、追加、削除などが行われると性能を十分出せない場合があります。
そのため、レプリカを作って、一方を更新系、他方を参照系のみといった運用はよく行われることです。
「ジョインの結果をWebサービス中に、なるべく高パフォーマンスで参照させたい」なら、他のテーブルからジョインした結果を参照専用のテーブルに格納し、そのテーブルを参照させるようにする運用も考えられるということです。
更新等は基のテーブルで行い、定期的に参照専用のテーブルに反映させます。
ただ、ジョインした結果が100万件といった単位で、繰り返し参照されるようなデータでないなら、この方式は効果はありません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Oracleで上書きImportはできま...
-
Accessのテーブルデータを一気...
-
ビューのソートについて
-
マテリアライズドビューとスナ...
-
mysqlへの書き込みがリロードす...
-
accessでレコード更新直後の反...
-
MySQLやSQliteの中のデータ検索...
-
仕事のミス:本番データの削除→...
-
構文エラー : 演算子がありませ...
-
ORA-01401が表示され、データが...
-
同一テーブルのデータを参照し...
-
テーブルで一番古いレコードだ...
-
MS Accessを共有した際にファイ...
-
updateではinsertできない?
-
処理の途中で停止させ、再開さ...
-
Access無いけど.mdbが見たい!
-
Accessの処理速度を速めるため...
-
住所のDBテーブル、マスターの...
-
Access昇順レコードを、5分割...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでデータシートに同じデ...
-
Accessのテーブルデータを一気...
-
テーブルで一番古いレコードだ...
-
このISAMでは、リンクテーブル・・
-
アクセス レコードセットを更...
-
accessでレコード更新直後の反...
-
マテリアライズドビューとスナ...
-
ビューのソートについて
-
住所のDBテーブル、マスターの...
-
構文エラー : 演算子がありませ...
-
処理の途中で停止させ、再開さ...
-
Accessでレコード削除ができな...
-
「クリップボードにコピーされ...
-
Oracleで上書きImportはできま...
-
ACCESSで容量が50MBになった...
-
ERROR1062:Duplicate entry.......
-
結合テーブルでINSERTする方法...
-
IF NOT EXISTを使用するINSERT文
-
重複クエリを使ったデータ削除
-
MS Accessを共有した際にファイ...
おすすめ情報