私のテーブルには次のフィールドがあります。
- 日付 (整数)
- 状態 (整数)
- 製品 ID (整数)
- 商品名 (整数)
- 説明 (テキスト) (最大テキスト長 3000 文字)
行数は 800 万行を超えます。商品説明を別の表に入れるかどうかを決める必要があります。私の主な目標は、このステートメントを非常に迅速に作成することです。
SELECT Date,State,ProductId,ProductName FROM tablename ORDER BY DATE desc LIMIT 100
SQL の結果は、上記のステートメントの [説明] フィールドの値をフェッチしません。アプリケーション (新しいクエリ) で行が選択されている場合にのみ、ユーザーに説明が表示されます。
製品の説明を同じテーブルに入れたいのですが、SQLite が行をスキャンする方法がわかりません。日付の値が一致しない場合、SQLite はすぐに次の行にスキップできると思います。それとも、行が終了したことを知るために、説明フィールド値の最後に到達するまで、行のすべてのフィールドをスキャンする必要があるのでしょうか? 次の行に到達するためにすべてのフィールドをスキャンする必要がある場合、説明フィールドの 3000 文字の値は速度を大幅に低下させますか?
編集: INSERT 速度が重要であるため、インデックス作成は使用しないでください。
編集:すべてを1つのテーブルにまとめようとする唯一の理由は、何百ものアイテムの1つのトランザクションでINSERTとUPDATEを実行したいからです。同じトランザクションで同じアイテムが挿入され、後で更新される可能性があるため、アイテムごとの最後の挿入 ID を知ることはできません。