选择具有巨大“数据集”的记录

时间:2014-01-05 01:20:20

标签: tsql

背景资料

  • C#
  • MS MVC 4
  • Sql Azure
  • Linq - 身份

手头的问题:

选择物品表格中的记录,其中邮政编码在一定范围内。

项目表

  • id(PK)
  • 标题
  • ZipCode(Int)

进展摘要:

我有一个课程,它使用2013年美国Gazatteer邮政编码和制表区来收集邮政编码和评估邮政编码之间的距离。它基本上是一个.csv / .txt文件,我打开流并转换为POCO以处理距离。这个等式很正常;但是,根据这个邮政编码列表从Items表中选择一个Items列表是我不知道该怎么做的地方。

方案

用户A想要搜索区域代码46324半径25英里范围内的项目。 用户A点击搜索,在后台我的班级返回25英里范围内的124个邮政编码列表。

问题:使用此zipcodes列表检索Item表中的项目的最佳方法(性能明智)是什么?

可能的解决方案

我考虑过在where子句中使用tsql in关键字创建动态查询,并简单地将此列表作为where参数提供。这似乎不是一种非常注重绩效的方式;但是,考虑到我目前的架构,我没有看到任何其他方式。

我还考虑过采用一种分页功能,只需要前5个邮政编码返回结果,然后是接下来的5个,依此类推。这将涉及更多的工作,但它肯定似乎是一个更好的性能选择。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我偶然发现了你的问题,只是偶然地寻找其他东西,而且我觉得它已经很老了,但我还是认为我会给你一个评论:

在这种情况下,我要做的是实际允许数据库进行搜索,C#进行计算。你有一个C#类来计算距离?那么为什么不保存每个邮政编码到"查询表中每个邮政编码的距离"在sql中。

这样做可以确保数据计算一次,但是让sql为您找到合适的数据。

即:

  1. 使用from_zipto_zipdistance字段
  2. 创建一个表格
  3. 在开头计算并填充一次表
  4. 查询" select * from zip_lookup where zip_from = bla and distance between 0 and 100"或类似的东西