SQL Server-存储过程-二进制搜索算法

时间:2018-11-14 12:59:49

标签: sql sql-server tsql

我一直在寻找如何在sql中创建二进制搜索过程,但是我找不到它。你知道我该怎么办吗?

我正在使用此测试表:

declare @MyTable table (
    id int identity (1,1),
    UserName varchar(50),
    DNI int,
    Country varchar(50)
)

假设您已索引DNI字段,这是我们用来搜索记录的字段。因此,它们从高到低顺序排列。使用二进制搜索如何获取有关DNI的数据?

2 个答案:

答案 0 :(得分:1)

  

如果我们使用二分查找的逻辑以及   索引,我想您可以更快地查询,而无需   消耗那么多资源。你怎么想?

我不这么认为。即使从表的页面列表开始,按键值(SQL Server不维护该键值)排序,BTree遍历也会胜过二进制搜索。

对已排序列表的二进制搜索会在每次读取时消除一半的目标页面。如果这些行分布不均匀,则可以通过读取消除少于剩余行的一半。

遍历BTree时,将消除(N-1)/ N行,其中N是非叶子页上(索引键,页面指针)元组的数量,通常在100 s之内。而且由于树是“平衡的”,因此您可以通过任何大小的表进行3或4次读取,始终遍历目标页面。

答案 1 :(得分:0)

在TSQL(用户级别)中实现二进制搜索算法的速度不能比在核心级别上实现二进制搜索算法的速度更快。但是,您可以在DNI列上创建聚簇键(或临时表的聚簇索引),以物理方式严格地重组内存中的表数据。因此,搜索将是最快的。