`
xiaoer_1982
  • 浏览: 1865361 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

随机重成100万不重复的随机编码

Go 
阅读更多

转 zjcxc

最近在论坛看到有人问,如何快速生成100万不重复的8位编号,对于这个问题,有几点是需要注意的:
1. 如何生成8位随机数,生成的数越随机,重复的可能性当然越小
2. 控制不重复
3. 考虑性能
针对这个问题,我写了如下的示例来解决,希望能为有这类需求的人提供指导


生成100万条8位不重复数据的示例

USE tempdb
GO

-- 创建测试表

CREATE TABLE tb(id char(8))

-- 创建用于自动过滤重复值的唯一索引

CREATE UNIQUE INDEX IX_tb ON tb(id)
WITH IGNORE_DUP_KEY
GO

-- 测试数据插入的处理时间, 记录开始处理的时间点

DECLARE @dt datetime
SET @dt = GETDATE()
-- 插入随机数据

SET NOCOUNT ON

DECLARE @row int
SET @row = 1000000 -- 设置总记录数

WHILE @row >0
BEGIN
-- 显示提示信息, 表示还需要插入多行数据
RAISERROR('need %d rows', 10, 1, @row) WITH NOWAIT
-- 插入随机的位编码数据

SET ROWCOUNT @row

INSERT tb SELECT
id
= RIGHT(100000000 + CONVERT(bigint, ABS(CHECKSUM(NEWID()))), 8)
FROM syscolumns c1, syscolumns c2

SET @row = @row - @@ROWCOUNT
END

-- 显示插入数据使用的时间
SELECT BeginDate = @dt, EndDate = GETDATE(),
Second
= DATEDIFF(Second, @dt, GETDATE()),
GO
-- 显示最终的结果记录是否正确
SELECT COUNT(*) FROM tb
GO
-- 删除测试
DROP TABLE tb



解决中用到的技巧:

1. 控制产生的数据不重复,直接使用唯一索引中的 IGNORE_DUP_KEY 选项,使插入数据中的重复值自动过滤,避免手工处理重复

2. 使用 CHECKSUM 配合 NEWID() 函数,使生成的数据尽量随机,一般生成随机数会考虑使用 RAND() 函数,但这个函数是产生伪随机值,用下面的语句测试一下,会发现产生的数据全部是一样的,这不适用于想批量生成多个随机数,而NEWID() 函数生成的是GUID,基本上不会有重复的,再通过CHECKSUM将其转化成数字,这样产生重复的可能性会比较小

<!--End_rbody_58944299//-->
分享到:
评论

相关推荐

    永不重复的随机编码

    生成一个永不重复的随机编码 随即数+日期+时+分+秒

    c# 求随机数组但不重复

    随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不重复,随机不...

    js超简单实用随机产生1-100个数字不重复

    在JavaScript编程语言中,生成1到100之间不重复的随机数字是一项常见的需求,尤其在游戏、模拟或数据测试等场景中。本篇将详细解释如何实现这一功能。 首先,我们要理解JavaScript中的随机数生成。`Math.random()`...

    可随机抽取题目的不重复PPT课件.pptx

    可随机抽取题目的不重复PPT课件.pptx 这是一份PPT课件,主要用于随机抽取题目的教学活动。通过这份课件,教师可以快速生成随机题目,从而提高教学效率和互动性。 知识点1:PPT课件的应用 PPT课件是当前最流行的...

    不重复随机点名程序及源文件

    这是使用Python3.6编写的一个不重复随机点名的程序,有图形界面,可以用在课堂上和联谊活动里随机点名,而且可以做到不重复!非常适合老师们上课抽查学生,抽完所有名单后就会提示点名结束,简单易用。随资源奉上源...

    java随机产生四位验证码(相邻码不重复)两种算法实现

    在这个问题中,我们关注的是如何生成四位字符且无重复的验证码,以及如何进一步确保相邻字符不重复的实现方法。 1. 生成四位字符、整数组成的验证码(无重复码验证) 首先,我们需要一个包含所有可能字符的数组,...

    随机抽取数字并不重复

    可以随意定义范围,点击开始即开始随机滚动,当点击停止时,随机显示一个数字,并在下一次抽取过程中不重复出现

    PHP生成指定数量的不重复随机字符串

    可以生成指定数量的不重复随机字符串,支持纯数字、字母和数字组合、字母数字加特殊字符

    unity 随机数不重复出现

    ### Unity随机数不重复出现知识点详解 在Unity游戏开发中,随机数的生成是一个非常常见的需求,尤其是在设计一些需要概率事件或随机元素的游戏时。然而,有时候我们需要确保生成的随机数在一定范围内不会重复出现,...

    随机线性网络编码

    随机线性网络编码原理,讲述随机线性网络编码的应用及模型建立

    随机选不重复号程序

    在这个特定的情况下,我们讨论的是一个名为"随机选不重复号程序"的项目。这个程序的主要功能是生成随机号码或者名字,同时确保每次选取的号码或名字都是独一无二的,避免重复。这种功能在抽奖、分组、竞赛编号分配等...

    随机抽号不重复

    这个名为"随机抽号不重复"的项目提供了一种解决方案,允许用户自定义号段,并确保抽号过程中不出现重复,同时还能将结果导出。这个程序是基于C#语言编写的,使用者可以直接运行,且附带了个人手工编写的源代码,方便...

    随机生成不重复字段-自定义各个字段长度(陈表达原创).xlsm

    随机生成不重复字段-自定义各个字段长度,批量随机生成多个不重复多段字符串(每个段可自定义长度) 批量随机生成多个不重复多段字符串(每个段可自定义长度) 哪个字段有输入长度,即为生成多少段字符 1、生成10组...

    VB生成不重复的随机数

    此技术常用于各种场景,比如彩票系统、抽奖程序或需要无重复随机选择的应用。 ### 一、基本原理 生成不重复的随机数主要涉及两个关键步骤: 1. **创建一个有序序列**:首先准备一个包含所有可能数字的数组。 2. **...

    omf.rar_omf_伪随机序列_随机序列_随机编码

    标题中的“omf.rar_omf_伪随机序列_随机序列_随机编码”表明这是一个关于伪随机序列和随机编码的程序资源,其中“omf”可能是某种特定的文件格式或者编程语言的缩写。在IT领域,伪随机序列通常用于模拟真正的随机数...

    随机生成myeclipse编码

    4. **MyEclipse的插件支持**:MyEclipse虽然不直接提供随机编码生成的功能,但它支持Eclipse的插件系统。有一些第三方插件如Random String Generator可以帮助我们在IDE内快速生成随机字符串,提高开发效率。 5. **...

    java开发技术调用rendom函数,随机生成32位不重复的字符

    "Java开发技术调用Random函数,随机生成32位不重复的字符" 在Java开发技术中,生成随机数是非常常见的需求。例如,在注册用户账户时,需要生成一个随机的密码。在游戏开发中,需要生成随机数来决定游戏的结果。在...

    随机取不重复的数.sb2

    儿童编程开发软件scratch制作简单程序《随机取不重复的数》

    随机编码的matlab程序

    随机编码的matlab程序

Global site tag (gtag.js) - Google Analytics