带有过滤的MS SQL产品列表

时间:2014-02-12 02:51:50

标签: asp.net sql-server ajax vb.net

我正在使用MS SQL数据库在ASP.NET(VB)中构建应用程序。它是汽车的搜索工具,包含每辆汽车及其所有属性(颜色,门,气体,制造年份等)的列表。此工具在gridview中输出结果,用户可以执行高级搜索和过滤。过滤需要非常细粒度(气体范围,颜色,年份范围等),我似乎找不到最好的方法来进行这种过滤而没有大的SQL where语句极大地影响SQL性能和页面加载。我觉得我在这里遗漏了一些非常明显的东西,谢谢你的帮助。我不确定其他哪些细节会有所帮助。

1 个答案:

答案 0 :(得分:1)

这不是您正在构建的OLTP数据库 - 它实际上是一个分析数据库。真的没有办法解决必须过滤的问题。问题是数据的组织是否允许在大多数时间进行搜索,还是需要扫描;以及生成的JOIN是否可以有效地完成。

我的建议是继续按照您的方式创建规范化的数据。然后,构建一个将其旋转到数据仓库中的进程,根据需要进行非正规化,以便您可以通过WHERE子句进行过滤,这些子句必须做很少的工作。

对于每个可能的搜索结果,您在表中有一行不需要连接到其他表(或只有几个事实表)。

你可以通过将里程数拉成5英里/加仑的频段来降低汽油里程等某些值的复杂性。 (10-19,20-24,25-29等)

当您需要添加数据并对其进行更改时,您的数据仓库加载过程(可能每天运行一次)将使数据仓库保持最新状态。如果您希望更频繁的加载不会使客户端脱机,您可以将数据仓库构建到备用节点,然后将它们交换出来。假设构建需要2个小时。您为新数据库构建了2个小时,然后交换到新数据库,所有数据只有2个小时。然后你擦除旧数据库并使用空格再做一次。