3


0

mysqlデータベースからデータを取得する場合、どちらが速いでしょうか?

mysqlデータベースからデータを取得する場合、どちらが速いでしょうか? 2つの列に分割されたデータ、または単一の列からの同じサイズのデータ​​?

編集する

アイデアを示すために、質問とそれが受け取る5つの回答の表を用意しています。 これらの答えは、それぞれ約1500ワードという非常に大きなものです。 データの取得速度については、各回答に列を使用する必要がありますか、それとも区切り文字で区切られた5つの回答を含む1列を作成し、スクリプトを使用してそれらを分離する必要がありますか?

6 Answer


4


回答を1つの列に区切らないでください。 行う場合は、http://en.wikipedia.org/wiki/First_normal_form#Repeating_groups_within_columns [db設計の経験則](最初の標準形式)を破るだけでなく、世界を傷つけるようなプログラミングをします。

また、ここで_早すぎる最適化_に参加していることを考慮する必要があります。 また、それをしないでください。 私の経験では、他の人も同意すると思いますが、RDBMSを信頼して、データを効率的に保存および取得してください。 必要なことは、インデックスを適切に設定することだけです。 これが今後パフォーマンスの問題になる場合は、その時点で非正規化することができます。


4


編集に応じて、提示するオプションはどちらもこの問題の「正しい」設計ではありません。 回答テーブルに5つの_rows_を作成し、それぞれに質問のIDと1つの列に1つの回答を含める必要があります。

パフォーマンスの問題があることが判明した場合にのみ、他の設計を検討してください。 何百万もの質問を収集していない限り、問題が発生することはほとんどありません。


2


それらが同じテーブルにある場合、違いはありません。

行にアクセスすると、列からデータを検索するのに非常に時間がかかります。

データとそのアクセス方法に基づいて決定する必要があります。


2


推測や仮定に頼らないでください。 ハードウェア上で、コーディングとデータを使用して、自分でベンチマークを行います。


2


情報にアクセスして使用する方法は、実際に保存する方法よりも関連性が高いと思います。

多肢選択式の回答など、各回答を個別に参照する場合は、次の構造を持つ3列のテーブルに回答を保存すると思います。

CREATE TABLE answers (
  question_id INTEGER PRIMARY KEY,
  answer INTEGER,
  answer_text TEXT
);

答えは、1、2、3、4、などのようになります。 与えられた質問の答えのそれぞれについて、より適切で正気でしょう。


0


一部のDBは、テキストタイプの列にインデックスを付けません。 したがって、テキスト列の列をvarcharに分割すると、各列にインデックスが作成され、_and_テキスト列にインデックスを作成しないDBを使用している場合、それらを分割することでパフォーマンスが向上します。