我正在创建一个应用程序,它将从SQLite数据库中获取数据并将其显示在表中。
我希望在用户进行选择时(通过多个下拉框)实时更新表格。每次用户从下拉框中选择一个选项时,应用程序都必须创建一个新的SELECT查询,并添加,删除或更改新的WHERE子句。该表将显示查询结果,因为从下拉框中选择了一个项目。
我的问题是,为了使提取过程更快,我是否可以索引每个表中的每个字段?我不确定这是否可能。
我不需要担心INSERT,ALTER等性能问题,因为很少会添加新数据。
由于
答案 0 :(得分:5)
我认为你应该首先看看SELECT查询的性能是否真的是一个问题。索引可占用大量空间(有时甚至超过实际数据),因此不要尝试过早优化(请记住,您可以随时添加索引而无需更改任何其他内容)。
如果您确实发现了问题,可以尝试在WHERE子句中使用的字段上添加索引,从最常查询的字段开始。
答案 1 :(得分:2)
您是否已经将每个列都搜索到了?真?没有索引,查询太慢了?哦,好吧,如果你和数据变化一样罕见,建立索引(假设它们是一种类型,它自然是索引的合理)。虽然空间成本非常高,但是一旦你达到了索引无法适应内存的大小(以及程序和操作系统等其他重要的东西),那么你将会转向磁盘而不是很多,一切都会慢下来。
但是,在测量真实数据上的问题之前,请不要进行优化。过早的优化是所有邪恶的立方根。
答案 2 :(得分:2)
我的问题是,为了制作 我/我可以更快地获取进程 索引每个表中的每个字段?我 不确定这是否可能。
是的,这是可能的。是否 取决于您拥有多少磁盘空间;索引可以巨大。
答案 3 :(得分:1)
不在每个字段上添加索引都不会使其更快 - 系统一次只能使用一个索引。如果该列仅包含几个不同的值(例如客户出生年份),那么使用索引将比读取表中的每个记录并丢弃不匹配的记录效率低。 OTOH如果用户按表的主键过滤那么索引将非常非常有效。
在每个字段组合上添加索引会使其更快 - 但那是(N + 1)!索引。这将需要大量存储并大幅减慢任何DML。
最好的妥协是
下进行。
答案 4 :(得分:0)
实现此目的的最佳方法是在表加载时拉下所有数据并填充表。然后只需向表列添加过滤器,让下拉列表联系过滤器,而不是每次都转到数据库。