我有一个sqlite数据库,用于存储有关备份作业的信息。每次运行,由于向特定表添加大约32,000个条目,因此增加大约25mb。
这个表是一个“映射表”,用于将某些信息链接到另一个表中的记录......它有一个我不使用的主键(autoincrement int)。
sqlite将为INT列保留1,2,4或8个字节,具体取决于其值。该表只有3个附加列,也是INT类型。
我在我的查询中用作过滤器(WHERE)的列的数据库中添加了索引。
如果存在索引等,并且在所描述的情况下,主键在性能方面是否有任何有用的好处?
注意:性能对于这个项目非常非常重要 - 但是如果在32,000个条目作业上保存10ms意味着额外的10MB数据,那就不行了!
答案 0 :(得分:3)
主键索引用于查找给定主键的行。它还用于确保主键值是唯一的。
如果使用其他列搜索数据,则不会使用主键索引,因此不会产生性能优势。但它的存在不应该对性能产生负面影响。
不必要的索引会浪费磁盘空间,并使INSERT和UPDATE语句执行得更慢。它应该对查询性能没有负面影响。
答案 1 :(得分:0)
如果你真的不使用这个id什么不放弃这个列+主键?保持未使用的主键id列的唯一原因是可以创建与另一个表的主 - 详细信息关系。
另一种可能性是保留列,但要删除主键。这意味着应用程序必须负责为每个insert语句提供唯一的id。在每个批处理操作之前和之后,您必须检查此列是否仍然是唯一的。由于多并发问题,这在例如MySQL和Oracle中不起作用,但它在sqlite中有效。