2011-02-25 79 views
1

我的表中使用下列的层次结构:通过定义索引来提高iOS上Sqlite数据库的性能?

int ID (PK, unique, not null) 
int ParentID 
int MasterID (not null) 
smallint Type (not null) 
varchar(255) Name 

我需要通过查询这个数据库:

  • 通过ID获取一个条目
  • 获得一个项目的所有儿童(通过查询ParentID并限制为一个特定的MasterID)
  • 获取特定类型项目的所有子项

我最好在这个Sqlite数据库上定义哪些索引? 另外值得注意的是:我需要Bul插入相当一些记录(删除属于特定MasterID的所有内容,然后插入约20000行)。我认为定义许多指标会降低性能,对吧?目前,我一次插入500条记录,并将其包装在“BEGIN”和“END”中。

还有哪些其他设置应该适用于数据库,特别是在iOS的情况下?

回答

1

您定义的哪些指数将直接受到您查找的任何键的影响。作为一般规则,任何关系(外键)都是索引的好地方。乍一看,我建议索引你的int数据类型,因为它价格便宜。请记住,只有在增加性能的情况下才能进行索引。在这种情况下,测试是要走的路。

您可能会添加索引,让它减慢速度(索引减慢写入操作,但不会减慢读取速度)。最好在各种配置中进行测试。对于如何创建索引来说,没有什么万能的。如果您发布了您正在运行的查询,我们可能会提供更多信息。

最后,保持索引尽可能窄(即 - 除非已经测试了一吨并且发现它是最高性能的,否则不要在多列上创建它)