2011-12-16 10 views
0

私はプロジェクトを構築しており、mysqlデータベースに関する質問があります。アプリケーションは多言語です。異なるタイプのテキストフィールド(varchar、text、med-text)を別のテーブルに分割すると、パフォーマンスが向上するかどうかは疑問です。または、テキストフィールドだけで1つのテーブルを作成する方が良いでしょうか?TEXTフィールドを複数のテーブルに分割すると、多言語アプリケーションのパフォーマンスが最適化されますか?

この質問と多言語の制約を念頭に置いて、さまざまなタイプのテキストフィールドを別々のテーブルに分割するとパフォーマンスが向上するかどうかは疑問です。なぜなら、すべてのテキストと言語を含むテーブルが1つだけあると、簡単に検索できるからです。 (項目の列にあるこの値のテキストとその言語を教えてください)さまざまな種類のテキストに異なる表がある場合。データベースのスペースを節約できます。 varchar(200)にはフルテキストエリアは必要ありませんが、項目、テキストの種類、テキストの言語との間に接続を作成するための複数のテーブルがあります。

あなたは最高だと思いますか?または、私が使っていない可能性がいくつかありますか?

+0

保存するデータの実際の例がなくても、あなたの質問に答えることは非常に難しいです...データ間の関係 - あなたの質問にさらに詳細を加えてください – ManseUK

答えて

0

blobtextのデータ型を持つ列を、正規化を破棄しても、他のデータ型とは別の場所に保持する方がパフォーマンス上の理由から優れています。

は列name varcharaddress varchardob datepicture blobpersonテーブルを考えてみましょう。画像は約1MBになり易く、残りの列は1KBを超えないことがあります。特定の都市に住んでいる人々の名前と住所だけをリストアップしたい場合でも、同じテーブルにすべてを保管している場合でも、何ブロックのデータを読み込む必要があるかを想像してください。

0

MySQLに縛られていない場合は、フルテキスト検索を行う場合は、Apache Luceneなどのテキスト検索エンジンを使用することをお勧めします。私が知る限り、MySQLはフルテキスト検索でLuceneができるほどのパフォーマンスを提供しないためです。

あなたがMySQLにバインドされている場合は、問題の現在の定義に基づいていくつかの情報を提供しようとします。

MySQL reference documentationは、と述べている:一時テーブルを使用して処理されるクエリの結果でBLOBまたはTEXTの列の

インスタンスではなくメモリに比べて、ディスク上のテーブルを使用するようにサーバーを引き起こしMEMORYストレージので、エンジンはこれらのデータ型をサポートしていません。

だから、あなたがテキストフィールドを含むテーブルの上にSELECT *を使用してクエリを実行する場合、することができますどちらか本当にテキストフィールドと速度を得るためにそれを必要としないものを必要とする別のクエリ。テキストフィールドとテーブルを分離することもできます。セカンダリテーブルにテキストフィールドを保存すると、重複したキーストレージとそのセカンダリテーブルのインデックスの余分なオーバーヘッドが発生します。しかし、データベース設計によれば、テキストフィールドを別のテーブルに移動することで不要なインデックスの更新がなくなることもありますが、スキーマやデータアクセスの機会がわからないため、これは単なる命題です。

関連する問題