【问题标题】:tell sql server to do a binary search?告诉 sql server 进行二分搜索?
【发布时间】:2013-03-28 11:51:19
【问题描述】:

我有点想以某种方式指示 sql server 使用特定算法执行搜索。

我的场景就像我有一个排序的单词列表。我将其上传到数据库表。我想搜索表格以查找该单词是否存在。这就是我的要求有多远。

sql server 是为这样的用例设计的吗?如果没有这样的事情,我可以使用哪些选项来快速检索?

【问题讨论】:

  • 只要您在该列上有索引,无论是聚集的还是非聚集的,SQL Server 都会为您执行二进制搜索。你不能让它比 SQL Server 更快。

标签: sql-server algorithm search binary-search


【解决方案1】:

SQL Server 应该已经对您的数据实施了最快的搜索。事实上,如果你在你搜索的那个字段上创建一个索引,你会得到比二分搜索更好的结果。

【讨论】:

  • 你能举个例子,它会比二分搜索更快吗?我们知道要从索引中获取记录,它必须首先读取索引,然后从数据库表中获取相关行。
  • @JamshaidK。一个例子是基于散列的索引,尤其是如果全文搜索已经到位。假设有一个 256 路关联哈希表用作索引,其中对条目进行排序。然后,如果您搜索一个值,SQL Server 将首先通过使用具有匹配“哈希”的索引的确切部分来减少搜索该值的集合,然后在该部分上实现二进制搜索。这会比在整个数据语料库(整个表)上执行二进制搜索要快一点。
  • 我明白那部分,如果使用基于哈希的索引,索引可能会更快。但是,假设我们有一个表,我们知道记录的数量,并且我们知道表中的数据是有序的,因为我们已经根据标识列按顺序插入了它。不能只做一个二分搜索而且速度还不够快吗?
  • @JamshaidK。你的意思是如果表没有索引?或者,如果您查找并且应该排序的字段没有被索引?不,SQL Server 很可能那时不会进行二进制搜索,因为大多数数据库都针对快速 CRUD 进行了优化,而不喜欢任何一种操作,也就是说,SQL Server 不假定表中的数据已经按任何字段排序,因为新的插入可以添加不同的值,并且它们必须足够快地执行,以免滞后于应用程序。这就是为什么您需要这些索引来进行快速选择。
  • 我完全赞成使用索引。但我只是好奇这是否可能,如果是或不是,为什么?这里的问题是,查询是否不可能进行二进制搜索而不是索引查找/扫描来获取行?理想情况下,当表上没有索引时,它会进行表扫描,即强制搜索(至少我是这么认为的),这有时往往效率不高。
猜你喜欢
  • 2011-02-27
  • 2015-12-04
  • 2017-05-09
  • 2015-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-02
  • 1970-01-01
相关资源
最近更新 更多