2012-03-02 36 views
2

私は2つの列を持つ単純なテーブルを持っています: "id" INTEGERをキーに、 "data" INTEGER。sqlite:配列を保存しますか?

ユーザーの要件の1つは、データを表示する順序を保存することです。 私はテーブルのレコードの順序を保存する必要があります。

私が見ているように、単純な解決法:id、data、order_id。 しかし、この場合、ユーザーがテーブルのビューの真ん中にレコードを追加すると、 多くのレコードを更新する必要があります。

別の考え方:id、data、next_id、previous_id。 挿入は高速ですが、定義された順序でのレコードの抽出は遅いです。

したがって、テーブル のレコードの順序をsqliteで保存するのに最適な(高速な)方法は何ですか?高速=定義済みの順序でのレコードの高速挿入+高速抽出。

更新: order_idの問題は、新しいレコードの挿入時に見られます。 10×10^3のレコードがあると思います。新しいレコードを挿入すると、すべての10 * 10^3レコードが最悪の場合に更新されます。 sqliteデータベースファイルはフラッシュメモリ上にあります。だから、PCほど高速ではなく、フラッシュの寿命を延ばすために "書き込み"サイズを減らすほうがよいでしょう。

答えて

0

私はORDER_IDが優れていると思いますが、あなただけのこの順序は、このように第二のPKフィールドを必要とする、すべてのテーブルまたはサブセットに一意である場合、私は疑問に思うん

update table 
    set order_id = order_id + @newRecordOrder 
where id = @id 
    and order_id > @newRecordOrder 

1つの更新命令を必要としています。

+0

私が見るようにorder_idに問題があります。たとえば、5000個のレコードがあり、101個のレコードを挿入すると、4500個のレコードを更新する必要があります。 sqliteデータベースはフラッシュしています。だから、ハードディスクのあるPCほど遅いです。 – user1244932

+0

まあ、それでは、順番に並べられたデータをどれくらい頻繁に検索するのか、それとも無秩序なIDを挿入するのかということがもっと重要です。 –

+0

私はあなたにprevious_idとnext_idの両方が必要とは思わないただ1人で十分でしょう。また、挿入されたレコードを指すために、次/前のIDを持つレコードへの更新を意味します。 –

関連する問題