SQLite - 为每个字段创建和索引

时间:2010-09-01 09:43:00

标签: sql sqlite

我正在创建一个应用程序,它将从SQLite数据库中获取数据并将其显示在表中。

我希望在用户进行选择时(通过多个下拉框)实时更新表格。每次用户从下拉框中选择一个选项时,应用程序都必须创建一个新的SELECT查询,并添加,删除或更改新的WHERE子句。该表将显示查询结果,因为从下拉框中选择了一个项目。

我的问题是,为了使提取过程更快,我是否可以索引每个表中的每个字段?我不确定这是否可能。

我不需要担心INSERT,ALTER等性能问题,因为很少会添加新数据。

由于

5 个答案:

答案 0 :(得分:5)

我认为你应该首先看看SELECT查询的性能是否真的是一个问题。索引可占用大量空间(有时甚至超过实际数据),因此不要尝试过早优化(请记住,您可以随时添加索引而无需更改任何其他内容)。

如果您确实发现了问题,可以尝试在WHERE子句中使用的字段上添加索引,从最常查询的字段开始。

答案 1 :(得分:2)

您是否已经将每个列都搜索到了?真?没有索引,查询太慢了?哦,好吧,如果你和数据变化一样罕见,建立索引(假设它们是一种类型,它自然是索引的合理)。虽然空间成本非常高,但是一旦你达到了索引无法适应内存的大小(以及程序和操作系统等其他重要的东西),那么你将会转向磁盘而不是很多,一切都会慢下来。

但是,在测量真实数据上的问题之前,请不要进行优化。过早的优化是所有邪恶的立方根。

答案 2 :(得分:2)

  

我的问题是,为了制作   我/我可以更快地获取进程   索引每个表中的每个字段?我   不确定这是否可能。

是的,这是可能的。是否 取决于您拥有多少磁盘空间;索引可以巨大

答案 3 :(得分:1)

不在每个字段上添加索引都不会使其更快 - 系统一次只能使用一个索引。如果该列仅包含几个不同的值(例如客户出生年份),那么使用索引将比读取表中的每个记录并丢弃不匹配的记录效率低。 OTOH如果用户按表的主键过滤那么索引将非常非常有效。

在每个字段组合上添加索引会使其更快 - 但那是(N + 1)!索引。这将需要大量存储并大幅减慢任何DML。

最好的妥协是

  1. 默认情况下需要进行一些过滤
  2. 构建符合常用选择标准的索引(包括'默认'过滤)
  3. 日志选择标准和查询时间,以确定如何改进
  4. 下进行。

答案 4 :(得分:0)

实现此目的的最佳方法是在表加载时拉下所有数据并填充表。然后只需向表列添加过滤器,让下拉列表联系过滤器,而不是每次都转到数据库。