2016-07-16 4 views
0

私はアンドロイドアプリケーションを開発しており、データの格納と検索にSqlite DBを使用しています。このアプリケーションには、テキストデータを格納および検索する機能があります。私は以下の利点のため仮想テーブルの実装に行くことにしました。SQLite:ノーマルテーブル対仮想テーブル。どちらを選択するのですか?

a。より速い実行

b。全文検索

私のアプリケーションは大量のテキストデータを保存するためにスケーラビリティがあり、特定のテキストをすばやく検索できる必要があるためです。始める前に私はいくつか質問があります。

  1. 仮想テーブルのみを使用する必要がありますか?長期的には安全ですか?私はそれが正常なテーブルと仮想テーブルを保つことは安全であることを読んだ。私は同じデータの2つのコピーを保持することをお勧めしません
  2. 私は検索効率を向上させるために仮想テーブル内のいくつかの列をインデックスする予定ですか?パフォーマンスとメモリのオーバーヘッドが発生しますか?
  3. 私はテーブルに7列あり、検索するデータは4列にまたがっています。これらの4つの列を索引付けする仮想テーブルまたは通常のテーブルを使用するとよいですか?

事前

に感謝

答えて

0

FTSテーブルは、実際にテーブルではありません。それを指標と考えてください。

同じデータを2回保存しないようにするには、external content tableを使用してください。

FTSテーブルはすべてのデータをテキストとして格納し、組み込みフルテキストインデックス以外のインデックスは許可しません。さらに、documentation言います:ROWIDによって

  • 問合せ:

    FTSテーブルが2つの異なる形式のSELECT文を使用して効率的に照会することができます。 SELECT文のWHERE句に "rowid =?"という形式のサブ句が含まれている場合、 SQL式である場合、FTSは、SQLite INTEGER PRIMARY KEYインデックスに相当するものを使用して、要求された行を直接取り出すことができます。

  • フルテキストクエリ。 SELECTステートメントのWHERE句に "MATCH?"という形式のサブクエリが含まれている場合、FTSはビルトインフルテキストインデックスを使用して、フルテキストクエリ文字列と一致するドキュメントに検索を制限できますMATCH句の右オペランドとして指定します。

これら2つのクエリ方法のどちらも使用できない場合、FTSテーブルのすべてのクエリは、テーブル全体のリニアスキャンを使用して実装されます。

したがって、テキスト以外のデータを決してFTSテーブルに保存しないでください。

関連する問題