• ベストアンサー

SELECTの検索速度と、DB設計

DB設計で悩んでいます。 ・一つのテーブルにするとカラム数が100ぐらい。 ・格納するデータはテーブルを正規化するようなものではない。 この場合のSELECTでの検索速度ですが、たとえ取り出すカラムを指定していてもカラム数が多いと検索速度に影響がでるのでしょうか? 或いは、テーブルを小分けにして、取り出すデータに応じてテーブルを結合していく方が良いのでしょうか? という感じでカラム数が検索スピードに与える影響についてどなたかご教授いただけませんでしょうか。宜しくお願いします。

  • MySQL
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

幾つかのRDBMSについて知識を有していますが、多くのRDBMSはカラム数が多いと、オーバヘッドにはなります。性能を重視するなら、カラム数は少ない方がいいでしょう。 RDBMSによっては、カラム数による性能劣化を防止する機能を持ったものもありますが、MySQLにそういった機能があるかどうかは把握していません。 正規化するようなものでない100個のカラムは、別々のカラムに分けなければならないものなのでしょうか? SQL中で検索条件、ソート、グループ化、演算などで指定しないなら、DB上はカラム分けは必ずしもしなくていいのではないでしょうか? →DB上は1個のカラムとし、アプリケーション側で分解するといった方法

briantaphy
質問者

お礼

お返事が遅くなり申し訳ありません。 なるほど、そういう手段もあるのですね。何も考えずにカラムを増設していました。大半がSQLで検索等の処理をしないデータなので、配列かカンマなんかで繋いで、スリム化してみます! アドバイス有難う御座いました!

その他の回答 (1)

  • ymmasayan
  • ベストアンサー率30% (2593/8599)
回答No.1

カラム数をxとするとアクセス時間はほぼa+bxです。 テーブルを分けるとaの影響で普通はアクセス速度が下がります。 それに速度対策としての分割は論理的な理解を狂わせますので 余りお勧め出来ません。

briantaphy
質問者

補足

素早いご回答ありがとう御座います。 a+bxのaとbは何を示しているのでしょうか?基本的なこととは思いますが、宜しくお願いします。

関連するQ&A

  • データ型による検索速度の違いについて

    LAMP環境でWEBシステムの設計中です。 select文のwhere句の検索条件となるカラムにおいて、 データ型による検索速度に差があるのか?についてご教示いただけたら幸いです。 例えば顧客データのようなテーブルで「都道府県」カラムを持っているとして、 その中に格納するデータをintの1~47にした方が良いのか、それともvarcharで 北海道~沖縄県にした方が良いのか、パフォーマンスの観点から悩んでいます。 各ケースにおいて検索速度に差はあるのでしょうか? データ件数は5000超程度です。 以上、よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • DB設計に要する見積もりについて

    新規のシステムで、全体の見積もりを行う中で、DBだけに注目して容量の算出、テーブル作成、正規化等プログラミングする前にいろいろやる事があると思いますが、その部分だけの作成にはどのような情報があれば、工数を算出できるのでしょうか? 勿論、テーブルの数や名前、その中の項目数や項目名、収まるデータ量なんか はDB作成以前の設計段階での工数見積もりに入ってくると思うので、ここでは DB見積もりから除外して考えております。 宜しくお願い致します。

  • DBの設計について

    MySQLの設計について質問があります。 まずDBの設計ですが以下のような場合どのようにすればよいのでしょうか? 1. 商品情報が数十万件あり、商品DBを作ってその中に全商品を登録するテーブルを作る 2. 各会員が上記の中から自分が扱いたい商品を登録するテーブルが必要 このとき、2.のテーブルは、  A. 1.のDBの中に作る  B. 各会員のDBを作ってその中に扱いたい商品のテーブルを作る  C. 会員DBを作って会員ごとのテーブルを作る のどれが正しいのでしょうか?各会員が扱う商品数も数万~数十万件になります。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • カンマ区切りで格納するカラムって設計上ありでしょうか?

    例えば、1,2,5,8,9,10 というような形でデータを格納するカラムをテーブルに作ろうと思っているのですが設計上ありでしょうか? 格納したあとは、それSELECTのIN(1,2,5,8,9,10)で 使用するのが主で、更新時のキーが別にあればOKという感じでしょうか? こういう場合に、このような設計をした事があるよ。いった例など教えていただけると幸いです。

  • SQL文について

    テーブルの結合について教えてください。 (DBはオラクルです) select * from table1,table2 where table1.カラム名=table2.カラム名; で、結合が出来ることは分かりました。 やりたいことはテーブルの結合と、ある期間のデータを持ってきたいのです。 select カラム名 from table1 where カラム名 between '20020213' and '20020218'; で期間を決めて引き出すやり方も分かっています。 一度に結合と期間を決めて引き出すやりかたってどうすればよいですか? それとも不可能ですか? 教えてください。

  • テーブル設計について

    二つのテーブルの行数は同じとします 1行に10カラム以上あるテーブルから1カラムだけ取得するのと idとvoteだけの2カラムで作ったテーブルから1カラムだけ取得する場合の処理スピードは速くなりますか? updateで更新する時のスピードもカラム数が多いと違いが出ますか? よろしくお願いします sprintf("SELECT vote FROM hoge WHERE id=%d", $id );

    • ベストアンサー
    • MySQL
  • テーブルで一番古いレコードだけをSELECTしたい

    テーブルで一番古いレコードだけをSELECTしたいのですが、どうすれば良いでしょうか? ■背景 ・テーブルからデータを取得しようと思ったら、「id」及び「autoincrement」に該当するカラムがありませんでした ・日付に該当するカラムもありません ・「phpMyAdmin」で確認すると、いつも同じ並び順で表示されるので、格納したレコード順で表示されているのではないかと思いました ■質問 ・この時、そのテーブルで一番古いレコードだけをSELECTしたいのですが、どうすれば良いでしょうか? ・where?

    • ベストアンサー
    • MySQL
  • DB設計について

    DB設計で悩んでいます。 ある商品を評価するシステムを作っているのですが 評価の項目が6つほどあります。 そのうち 4つは数字、残りは最大で全角400字程度です。 商品の数は5000点ほどあります。 この場合5000点全てに対してテーブルを作ったほうが良いのでしょうか?

  • カテゴリのDB設計について

    お世話になります。 商品データとカテゴリテーブルをそれぞれ分けたデータベースを作っており、JOINで該当カテゴリ名を抽出しています。 しかし商品によって複数のカテゴリに属する(カンマ区切りで「1,2,3」というように現状格納しています)場合、それらのすべてを拾ってくることは可能でしょうか? またカテゴリひとつひとつに対して商品データ内にカラムを用意するべきでしょうか? select `shop`.no, left outer join list_category on `shop`.category=`list_category`.no (現状) どうぞよろしくお願い致します。

    • ベストアンサー
    • MySQL
  • DB検索について

    (1)PHPにてSQLをコールしてテーブルから情報の取得を行いたいのです。  $cmnd = "select * from table_a where id=01";を実行し(fetch使用)  仮に15件セレクトされたとすると、抽出された15件は  プログラム内のどこに格納されるのですか? (2)また、そのレコードを順じ処理する場合において、終了条件はどの様に  判定したら良いでしょうか?  DB:oracle

    • 締切済み
    • PHP