gpt4 book ai didi

sql - 如何优化 BINARY(N) 的 SQL 查询?

转载 作者:行者123 更新时间:2023-12-03 17:00:37 24 4
gpt4 key购买 nike

我有一个表(10 mio 行)。对于每条记录,我需要有 480 个标志 (0, 1)。

我的解决方案是使用 binary(60) 字段并为每个标志使用位。

看起来还不错,但问题是:如何优化查询?我需要选择某些位设置为 1 的记录。

CREATE FUNCTION  [dbo].[fnBinarySet3] 
(@Value varbinary(60),@Position int)
RETURNS varbinary(60) AS
BEGIN
declare @retValue varbinary(60)

SELECT @retValue=L + Convert(Binary(1),M | P) + R
FROM (SELECT SubString(@Value,1,@Position / 8),
SubString(@Value, @Position / 8 + 1, 1)
, SubString(@Value, @Position / 8 + 2,60)
, Power(2,@Position % 8) ) X(L,M,R,P);

return @retValue
END

GO
create table t
(
int_id int not null identity primary key,
banner binary(60)
)

declare @i int
set @i=1000
while @i>0
begin
insert into t (banner) values(0x0);
set @i = @i-1;
end
update t set banner= [dbo].[fnBinarySet3] (banner,int_id%48)

select top 100 * from t where <------- for example where 3 or 5 bit is 1

我不知道如何使用索引。

你的建议?

最佳答案

Bloom filters :

... is used to test whether an element is a member of a set. False positive matches are possible, but false negatives are not.

创建一个散列 int/bigint 列,持久计算为 480 位的 bloom。索引计算列。在索引上搜索,bloom 将过滤掉所有特定的否定(希望是重要部分),其余部分(希望是少数)你必须扫描它们并确定它们是否真正匹配该位。

关于sql - 如何优化 BINARY(N) 的 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24044293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com