- ベストアンサー
SELECTの検索速度と、DB設計
DB設計で悩んでいます。 ・一つのテーブルにするとカラム数が100ぐらい。 ・格納するデータはテーブルを正規化するようなものではない。 この場合のSELECTでの検索速度ですが、たとえ取り出すカラムを指定していてもカラム数が多いと検索速度に影響がでるのでしょうか? 或いは、テーブルを小分けにして、取り出すデータに応じてテーブルを結合していく方が良いのでしょうか? という感じでカラム数が検索スピードに与える影響についてどなたかご教授いただけませんでしょうか。宜しくお願いします。
- briantaphy
- お礼率52% (25/48)
- MySQL
- 回答数2
- ありがとう数1
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
幾つかのRDBMSについて知識を有していますが、多くのRDBMSはカラム数が多いと、オーバヘッドにはなります。性能を重視するなら、カラム数は少ない方がいいでしょう。 RDBMSによっては、カラム数による性能劣化を防止する機能を持ったものもありますが、MySQLにそういった機能があるかどうかは把握していません。 正規化するようなものでない100個のカラムは、別々のカラムに分けなければならないものなのでしょうか? SQL中で検索条件、ソート、グループ化、演算などで指定しないなら、DB上はカラム分けは必ずしもしなくていいのではないでしょうか? →DB上は1個のカラムとし、アプリケーション側で分解するといった方法
その他の回答 (1)
- ymmasayan
- ベストアンサー率30% (2593/8599)
カラム数をxとするとアクセス時間はほぼa+bxです。 テーブルを分けるとaの影響で普通はアクセス速度が下がります。 それに速度対策としての分割は論理的な理解を狂わせますので 余りお勧め出来ません。
補足
素早いご回答ありがとう御座います。 a+bxのaとbは何を示しているのでしょうか?基本的なこととは思いますが、宜しくお願いします。
関連するQ&A
- データ型による検索速度の違いについて
LAMP環境でWEBシステムの設計中です。 select文のwhere句の検索条件となるカラムにおいて、 データ型による検索速度に差があるのか?についてご教示いただけたら幸いです。 例えば顧客データのようなテーブルで「都道府県」カラムを持っているとして、 その中に格納するデータをintの1~47にした方が良いのか、それともvarcharで 北海道~沖縄県にした方が良いのか、パフォーマンスの観点から悩んでいます。 各ケースにおいて検索速度に差はあるのでしょうか? データ件数は5000超程度です。 以上、よろしくお願いいたします。
- ベストアンサー
- MySQL
- DB設計に要する見積もりについて
新規のシステムで、全体の見積もりを行う中で、DBだけに注目して容量の算出、テーブル作成、正規化等プログラミングする前にいろいろやる事があると思いますが、その部分だけの作成にはどのような情報があれば、工数を算出できるのでしょうか? 勿論、テーブルの数や名前、その中の項目数や項目名、収まるデータ量なんか はDB作成以前の設計段階での工数見積もりに入ってくると思うので、ここでは DB見積もりから除外して考えております。 宜しくお願い致します。
- ベストアンサー
- その他(データベース)
- カンマ区切りで格納するカラムって設計上ありでしょうか?
例えば、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設計について
お世話になります。 商品データとカテゴリテーブルをそれぞれ分けたデータベースを作っており、JOINで該当カテゴリ名を抽出しています。 しかし商品によって複数のカテゴリに属する(カンマ区切りで「1,2,3」というように現状格納しています)場合、それらのすべてを拾ってくることは可能でしょうか? またカテゴリひとつひとつに対して商品データ内にカラムを用意するべきでしょうか? select `shop`.no, left outer join list_category on `shop`.category=`list_category`.no (現状) どうぞよろしくお願い致します。
- ベストアンサー
- MySQL
お礼
お返事が遅くなり申し訳ありません。 なるほど、そういう手段もあるのですね。何も考えずにカラムを増設していました。大半がSQLで検索等の処理をしないデータなので、配列かカンマなんかで繋いで、スリム化してみます! アドバイス有難う御座いました!