2

Suppose I want to store values a,b,c in a SQL table One option I have to store in one single column of a SQL DB by a separator like a-b-c (considering a,b,c values do not contain a '-' ) and then parse it by PHP after retrieving it. Another option is I should store all three values in different columns.

My question is:

Will storing in one column+retrieving+parsing take more time?

or

Storing in three different columns and retrieving it will take more time and resources?

Note: At any time I will need all three values of a,b,c i.e. if I am retrieving 'a' then I need to retrieve b and c too.

4

7 に答える 7

0

MySQLにはクエリするテーブルが3つではなく1つしかないため、すべての変数を1つの列に格納する方がわずかに高速になる可能性があります。ただし、テーブルを分割する必要があるかどうかという質問は、パフォーマンスとは関係ありませんが、データモデルの正規化とは関係ありません。詳細については、 http://en.wikipedia.org/wiki/Database_normalizationを参照してください。

明確にするために、テーブル名が「users」であるとします。ユーザーのID、名、名前、都市を保存するとします。それらを別々のテーブルに置くことは意味がありません。ただし、Webショップなどからのユーザーの注文を保存したい場合、同じテーブルに保存することはできません。それは何か違うこと(注文とユーザー)に関係するだけでなく、ユーザーが何件の注文をするかわからないので、新しいテーブルが必要です。

したがって、正規化=良い、できる=悪いという理由だけで、フィールドを別々のテーブルに配置します。

于 2012-06-18T09:47:39.150 に答える
0

それらを3つの別々の列に保存する必要があります。DB はこのために作られているので、パフォーマンスの問題を心配する必要はありません :)

これにより、データを選択した後の解析の手間が省け、データベースのすべての可能性を使用できるようになります。各値の出現回数を数えます...

于 2012-06-18T09:44:23.970 に答える
0

MySQL はB-tree 構造でインデックスを格納するため、PHP で取得して解析するよりも高速なので、 3 つの列をインデックスとして使用するのが正しいと思います。索引付けについての詳細

于 2012-06-18T09:45:28.760 に答える
0

文字列を解析しなければならないという問題を回避することをお勧めします。これにより、関数のオーバーヘッドが大きくなる可能性があります。

また、3 つの値すべてが必要であるという事実は、列の数も重要ではないという意味ではありません。3 つの個別の列を使用すると、必要なデータの行を解析および検索するための高価なクエリ呼び出しを行うことなく、A を個別にクエリできます。

于 2012-06-18T09:51:43.593 に答える
0

変数の数が常に同じである場合は、3 つの異なる列を使用する必要がありますが、そうでない場合は、それらの値を 1 つの列に入れることができます。#、このようなものを追加することでそれを行いました。#value#これらの値が必要な場合は、php 関数の爆発('#',$sql_val) を使用するだけです。

于 2012-06-18T09:53:25.867 に答える
0

考慮すべきことの 1 つは、「D」または「E」列を追加する必要があるかどうかです。

答えが「はい」または「多分」の場合、ルックアップ テーブルはデータベースの将来性を証明するのに役立ちます。

これは、列 A、B、または C がオプションになった場合にも適用されます

于 2012-06-18T09:53:28.663 に答える
0

興味深い事実は、私はあなたのソリューションで自分自身を発音することはできませんが、DB を行う標準的な方法として知られる3 列のソリューションのパフォーマンスについて正確であるということです。なんで?正しく実装しますか?バグフリーになりますか?コードがレビューされると、そのような設計は簡単に却下されます。

心に留めておくべきもう 1 つのことは、コードのメンテナンスです。つい一ヶ月前に書いたものを見て「こいつは何を考えていたんだ!?!」と思うことはよくあります。特にあなたがその男であるとき。

于 2014-02-17T08:03:09.850 に答える