2018年5月号」を読みました。見る「速いデータベースの作り方」という、データベース特集の会だったのですが、私なりの考えをまとめてみました。この時期は、新人エンジニアの方も多いと思いますので、少しでも参考になる何かがあれば良いかなと思いまして。それでは、スタートです。実務では、第1〜第3正規形がよく利用されます。理想は第3正規形なんですが、正規化をすればするほどテーブル数は増えるので、SQLが長くなったり、テーブル結合が煩雑になるといったデメリットもあります。私がオススメするのは、プログラムの定数やコンフィグファイルで賄えるマスタ系のデータは、極力テーブル化しないことです。都道府県のデータは、テーブル化するまでもありません。'沖縄県'」と、定数としてプログラム上に記述しておけば良いのです。このように、変更の確率が低いマスタ系のデータは、極力プログラム上の定数に書くことをオススメします。第3正規形で分離するようなテーブルでは、きっと対象となるようなテーブルも出てくると思います。SQLとプログラムの使い分けSQLの使い方を知った新人エンジニアの方の中には、SQLやテーブルを職人芸のように扱って、SQLで何でもやろうと考えている方もいらっしゃるかもしれません。個人的にはあまりオススメしません。DBサーバよりもプログラムが動くWEBサーバの方がスケール(並列化)しやすいからです。それに、プログラムは後から処理を変えやすいので、変更に強いという特徴があります。速いデータベースの話をしているのに、プログラムで頑張れというのも変な話ですが、要はプログラムとDBのどちらで頑張るのかという、その見極めが重要なのです。インデックスインデックスが使われると、検索が早くなるのは有名かと思うのですが、意外とインデックスを貼ることに対するコストは無視されがちです。当然ですが、インデックスを使うためには、インデックスの生成コストが代償として必要になります。検索が早くなるからといって、むやみやたらとインデックスを貼ってはならないのです。・・・なので、インデックスは検索条件として利用頻度の高いカラムなどに絞り、利用シーンに合わせて設定する必要があります。気をつけてインデックスを貼るべき第二の理由は、インデックスの生成コストはINSERTやUPDATE文に対して発生するからです。データ参照のSELECT文は、DBのスレーブサーバーなどを立てて、負荷を分散することが比較的やりやすいのですが、INSERTやUPDATE文となりますと、そう簡単な話ではありません。ディレクターブログデータベースを早くするにはデータベースを早くするためには、まず大前提としてテーブル設計が最も重要です。その上で、いかにシンプルなSQLで実現できるかが鍵になります。正規化も絶対ではありません。正規化は行なうべきなのですが、あえて正規化をしないような事例も勿論あります。アクセスが集中するようなページでは、そのページ用にカスタマイズしてデータを切り出して最適化した、専用テーブルを作ることもあります。SQLで複雑なことをしそうになったら、怪しい雰囲気が漂い始めたと思ったほうが良いです。相応のアクセス数が予想される、例えばWebAPIのような要件であれば、SQLはシンプルに越したことはありません。アクセスの集中しない管理画面のような場所でしたら、問題になることはそうありません。複雑なSQLが許容される局面であるかどうかは、常に意識した方が良いと言えるでしょう。さいごにDBサーバは、システムの大切なデータが保存されている生命線の場所であることが多いため、大切に扱う必要があります。DBもテーブルもSQLも、優しく扱ってあげて欲しいです。ちなみに、私の過去には、商品ページへのアクセスの度にアクセス数を計上するSQLを書いてしまい、あまりのUPDATE文の多さにDBサーバがパンクしたとか。マスターとスレーブを間違えて、誤ってスレーブDBでUPDATE文を流してしまうなどの、苦い経験がいくつかあります。いう意味では、私がDBの本当の意味での大切さを知ったのは、上記のようなトラブルをやらかしたからかもしれませんね。第14回が非常におすすめです。このすみろぐプログラムとSQLの責務の切り分けのような話も出てきますので、ぜひ聴いてみてください。02:25テーブル設計やSQLを学びながら、速いデータベースの作り方について考えてみるTweet関連記事2018-02-27esa.ioの育て方の講演を観れなかったので、スライドから内容を紐解いてみるはてなブックマークを見ていたら、とても気になるスライドがあ...2018-02-242017年とテック系Podcast(ポッドキャスト)を、紹介しつつ振り返る昨年も、通勤時間を利用して、たくさんのポッドキャストを聴い...2018-02-20技術書の買い方と選び方、レーベルを絞って購入するという選択肢ふと思いついたのですが、自分の技術書の買い方を整理してみる...2018-02-18Ansibleの基礎を勉強しているのですが、初心者向けに内容を整理しましたオライリーの「初めてのAnsible」を読んでます。はてなブログProWEB系エンジニア。ブログで趣味の映画・ゲーム・読書の感想を書いたり、技術系の知見を共有しています。技術書典7にサークル参加して、技術同人誌を頒布しました。BOOTHに電子版があります。(1)月別アーカイブスポンサーリンクはてなブログをはじめよう!konosumiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。