【发布时间】:2013-01-23 12:03:36
【问题描述】:
我的表有以下字段:
- 日期(整数)
- 状态(整数)
- ProductId(整数)
- 产品名称(整数)
- 描述(文本)(最大文本长度 3000 个字符)
将有超过 800 万行。我需要决定是否应该将产品描述放在另一个表中。我的主要目标是让这个声明非常快:
SELECT Date,State,ProductId,ProductName FROM tablename ORDER BY DATE desc LIMIT 100
SQL 结果不会获取上述语句中的Description 字段值。只有在应用程序中选择了行时,用户才会看到描述(新查询)。
我真的希望在同一个表中包含产品描述,但我不确定 SQLite 如何扫描行。如果日期值不匹配,我会假设 SQLite 可以快速跳到下一行。或者它可能需要扫描该行的所有字段,直到它到达描述字段值的末尾才能知道该行已经结束?如果需要扫描所有字段才能到达下一行,Description字段中的3000个字符的值会大大降低速度吗?
编辑:不应使用索引,因为插入速度很重要。
编辑:尝试将所有内容都放在一个表中的唯一原因是我想在一个包含数百个项目的事务中执行 INSERT 和 UPDATE。可以在同一个事务中插入相同的项目并稍后更新,因此我无法知道每个项目的最后插入 id。
【问题讨论】:
-
有多重要?查询中的索引加速通常比
INSERTs 的任何减速要大得多。 -
您是否实际测量过 INSERT 性能?
-
是的,这在应用程序设计中是不可接受的。
标签: sql performance sqlite