【发布时间】:2011-01-16 08:40:28
【问题描述】:
我面临着为我的应用程序存储一些参考数据(基本上是下拉值)的选择。此数据不会更改(或者如果更改,我可以重新启动应用程序),并且将作为 AJAX 自动完成小部件的一部分经常访问(因此一个用户可能会对此数据进行多次查询填写一个字段)。
假设每条记录如下所示:
category
effective_date
expiration_date
field_A
field_B
field_C
field_D
自动完成查询将需要根据每个记录中的 4 个字段检查输入字符串,并根据类别和有效/到期日期检查离散参数,因此如果这是一个 SQL 查询,它将有一个 where 子句,如下所示:
... WHERE category = ?
AND effective_date < ?
AND expiration_date > ?
AND (colA LIKE ? OR colB LIKE ? OR colC LIKE ?)
我觉得这可能是一个相当低效的查询,但我想我对数据库如何优化其索引等方面了解不够。我知道很多非常聪明的人非常努力地工作以真正制作数据库引擎在这种确切类型的事情上速度很快。
我看到的替代方法是将它存储在我的应用程序内存中。我可以为每个类别列出这些记录,然后遍历该类别中的每个记录以查看是否满足过滤条件。这绝对是 O(n),因为我需要检查类别中的每条记录。
有没有人面临过类似的选择?您有什么见解可以提供吗?
编辑:感谢各位的洞察力。将整个数据集发送到客户端并不是一个真正的选择,因为数据集非常大(几 MB)。
【问题讨论】:
-
对我来说,我会考虑在客户端缓存数据。
-
@David,确实有太多数据无法将其全部发送到客户端进行过滤。
标签: performance language-agnostic optimization