今天下午遇到了一个问题,就是对两个动态查询出来的记录集(注意是动态查询),判断二者其中一个字段是否包含相同的数据,当然,数据类型是一样的。着实为这个问题头疼了一番
我的数据库中的字段是较大的,包含了几十万行的数据,如果遍历两个记录集,天哪,这可是乘法原理呀,这样数量级的排列所产生的运算次数为:P(100000,100000),一个10万的全排列。效率有多高就知道了。
怎样才能找到一个性能较高的办法呢,把检索后的数据放入内存表,这时我想到了一个办法,就是对象的hashcode的计算方式,呵呵,如果能够为这个记录集找到一个唯一值,就像对象的HashCode,这样是不是就可以了呢,就像两个对象的比较一样。果然,试过之后,这样的问题就解决了,当然产生这个唯一值的算法是有待于研究的。
CREATE PROCEDURE [dbo].[ct_AddNewSection]
@lose_section_id int ,
@cell_id_list varchar(2000),
@errstr varchar(500) output
AS
set nocount on
declare @indexValue int,@pos int
declare @sectionid int

set @pos = 1
set @indexValue = 1
set @indexValue = charindex(',',@cell_id_list,@indexValue)
--两个内存表用来存储动态查询出的记录集
declare @t_cellid table (cellid int) --定义临时表
declare @t_sectionid table (sectionid int, tempval bigint ) --定义临时表,第一个字段是为了将多个类似的记录集放在一个表里与@t_cellid做比较

while @indexValue > 0
begin
set @cellID = substring(@cell_id_list,@pos,(@indexValue-@pos))
if @cellID <>''
begin
insert into @t_cellid(cellid)values(@cellID)
end
set @pos = @indexValue+1
set @indexValue = charindex(',',@cell_id_list,@indexValue+1) -----更改@indexValue
end
---下面就是主要的处理了,取要判断数据相同字段的hashcode
declare @hashvalue bigint
select @hashvalue = sum(CellID^3080|10880) from @t_cellid
insert into @t_sectionid select LogicSectionID,sum(CellID^3080|10880) from tb_CellOfLogicSection group by LogicSectionID

if exists (select * from @t_sectionid where tempval = @hashvalue)
begin
select @sectionid=sectionid from @t_sectionid where tempval = @hashvalue
set @errstr = '已经有包含相同组合存在,编号'+cast(@sectionid as varchar(10))
return
end这样只要判断这个@hashvalue就可以了
我的数据库中的字段是较大的,包含了几十万行的数据,如果遍历两个记录集,天哪,这可是乘法原理呀,这样数量级的排列所产生的运算次数为:P(100000,100000),一个10万的全排列。效率有多高就知道了。
怎样才能找到一个性能较高的办法呢,把检索后的数据放入内存表,这时我想到了一个办法,就是对象的hashcode的计算方式,呵呵,如果能够为这个记录集找到一个唯一值,就像对象的HashCode,这样是不是就可以了呢,就像两个对象的比较一样。果然,试过之后,这样的问题就解决了,当然产生这个唯一值的算法是有待于研究的。












--两个内存表用来存储动态查询出的记录集

























【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!