【发布时间】:2015-02-27 21:22:08
【问题描述】:
我找不到这个问题的解决方案,因为它看起来非常复杂
这里有 1 个 3 列的表
CodeVal_1 bigint Unchecked
CodeVal_2 bigint Unchecked
CountryCode char(2) Unchecked
CodeVal_1 和 CodeVal_2 共同构成主键
所以这个表包含如下数据
CodeVal_1 CodeVal_2 CountryCode
7602176 7864319 AT
16777216 16777471 AU
16777472 16778239 CN
16778240 16779263 AU
16779264 16781311 CN
16781312 16785407 JP
16785408 16793599 CN
现在我需要查询这个表
select CountryCode from tblCountryCodes where 215454 between CodeVal_1 and CodeVal_2
这在 SQL 服务器上完美运行,但是每次查询调用都很慢。所以我想通过一些预加载等在整个 C# 代码中完成这项工作。
但是我找不到比 SQL Server 2014 更快的正确方法
是否有可能通过某种双索引(我不知道这只是抛出想法)、哈希表、字典等来实现它
等待您的想法和建议
【问题讨论】:
-
看起来
CodeVal_2总是大于CodeVal_1?如果CodeVal_2已排序,您可以进行缩略搜索。当CodeVal_2大于或等于您要检查的数字时,您可以只检查记录而侥幸逃脱。或者甚至将记录拆分为多个列表(可能 number_of_lists = number_of_records 除以 100 或 1000 之类的),找到搜索编号将落入的列表,然后仅在该列表上执行上述缩写搜索。 -
itsme86 你能详细说明如何在 csharp 上快速检查大于或等吗?是否有这样的索引结构等而不是每次扫描整个内存?
-
你的表有多少行?它们都适合记忆吗?
标签: c# .net sql-server