0

DB には 2 つのフィールドがあります。1 つは説明 (TEXT)、もう 1 つは short_desc (VARCHAR-200) です。

検索結果を表示するときは、明らかに short_desc を使用します。誰かがアイテムをクリックすると、数千文字にも及ぶ完全な説明が表示されます。

検索には Sphinx を使用しているため、これらのフィールドにはどちらもインデックスがありません。

私の質問は、短縮された説明を取得するために SUBSTRING() を使用できる可能性がある場合、short_desc が必要ですか、それともスペースを浪費しているのでしょうか?

SUBSTRING のオーバーヘッドがあまりない場合、短い説明と長い説明を保存するよりも柔軟で無駄が少ないと思いますか?

4

2 に答える 2

1

いいえ、そうではありません (つまり、スペースを無駄にしません)。MySQL 5 のすべてのバージョンには、次のものがあります。

  • MySQL は、条件内の関数でインデックスを使用することはありません ( のようなものWHERE SUBSTR(X, 1, 2)=Y)
  • VARCHAR 列に索引を作成できます。つまり、短いテキストを使用する場合、それによって索引付けを使用でき、その索引が使用されることが確実になります。列TEXT構築では、インデックスは特定の長さでのみ可能です。

そのため、多くのクエリがある場合は、SELECT短い説明を付けることをお勧めします (上記に加えて、TEXTフィールドは個別に保存されるため、それらにアクセスすると最悪の問題が発生する可能性があります - ディスク操作)。この場合、不要なディスク読み取り操作を回避して、インデックスを作成および使用できます。

于 2013-09-04T11:45:44.900 に答える
1

データベースの観点からは、レコード長がすでに数キロバイトである場合、追加の 200 文字を保持するオーバーヘッドは最小限です。

私の懸念は、気まぐれなユーザー インターフェイスを基礎となるデータベース構造に結びつけることです。簡単な説明がちょうど 200 文字になるのはなぜですか? 単語の途中で単語を分割するのはどうですか? それとも数字の真ん中の数字?句読点の境界で区切りたいと思いませんか?

ここでのポイントは、「正解」がないということです。簡単な説明用のフィールドがあり、それがデータベースにある場合は、誰かがそれを変更して見栄えを良くしたいと思うかもしれないことに備えてください。ユーザー インターフェイスが最初の 200 文字だけを使用したい場合は、100 文字または 250 文字を必要とする新しいバージョンに備えてください。

ここでは、データベースのパフォーマンスが重要な問題になるとは思いません。部分文字列の追加のオーバーヘッドは、長い文字列の読み取りページが 1 ページ増える可能性があります。これは、ユーザー向けのアプリケーションではおそらく目立たないでしょう。

于 2013-09-04T11:53:15.840 に答える