我怀疑二进制搜索会比 SQL 数据引擎为您做的更快。但是,您将需要该列上的索引。
即使有 1 亿行,检索一行也应该很快。如果您必须一遍又一遍地重新运行或重新拉出“许多”行,则不会发生这种情况。所以不清楚你是如何提取这些数据的。
但是,如果您有某种类型的循环代码需要每次拉出一行,那么您可以绕过 SQL 引擎并在该索引上使用 seek() 命令 - 这应该会产生比使用更快的结果SQL 语句来拉出那一行。
请注意,seek() 不适用于链接表,但您可以通过创建数据库对象的实例来绕过此限制,因此即使链接表也可以使用 seek。
以上假设这里是 jet/ace 表,而不是 sql server。
因此,绕过 sql 语句并使用 seek() 命令(带有索引)将在此处产生最佳性能 - 可能 = 您构建的任何自定义函数方法的性能。
==== 编辑 ====
编辑:
发帖人还要求有多个键值的 seek()。
因此,假设我们需要在 HotelName 和城市上使用 seek()。
我们要绕过 sql 直接使用索引。
所以,我们需要 HotelName 和 City,并希望在这两个键值上使用 seek()。
您必须创建一个多键索引才能使其工作。
(不要与基于多于一列的复合键索引相混淆,这也是可能的!!!)。
因此,您执行此操作的方式是为表格设计 - 单击索引图标。
然后,在索引对话框中,您可以为 SINGLE 索引输入多于一列(这对于它的工作至关重要)。
因此对话框将如下所示:
所以在上面我们有 5 个索引。但是,请注意名为 HotelSearch 的索引。请注意我们如何为索引输入更多而不是一列。
您可以通过将索引框名称留在“空”下方来做到这一点
另外,上面是一个例子。我强烈建议您转储任何不需要的索引(这是由于如此高的行数 - 这些索引占用了大量空间 - 并且您可能已经达到接近 2 gig 的最大数据文件大小)。
所以请注意 ONE 索引的两列!我们当然可以向该索引添加更多列(键值)。确保考虑到列的“顺序”,因为您只能将额外的列作为搜索的可选列,不允许跳过先前的键值(因此您只能提供第一个索引列,或者之后的几个列随心所欲 - 但不允许跳过)。
因此,只需将索引名称列框留空——这意味着索引“键”将应用于 seek() 的 ONE 索引。
这意味着这两个索引现在属于一个索引名称。
因此,您必须在这里计划一下您要看到的关键索引“组”是什么(并记住顺序)。
好的,现在我们创建了具有多个键的索引名称,现在我们可以查找两个键值。我们的代码将如下所示:
Sub SeekTest()
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("dbo_tblHotels2")
With rst
.Index = "HotelSearch"
.Seek "=", "Holiday Inn", "Vancouver"
If .NoMatch = False Then
Debug.Print "found"
' got one!!!
End If
End With
End Sub
请记住,这种方法是对高速索引的原始使用——它将以您的处理器“汇编器”速度运行。
它将比使用 SQL 查询快 100 到 1000 倍。起泡很快。