Questions tagged «uniqueidentifier»

7
Guid vs INT-作为主键哪个更好?
我正在阅读有关是否使用Guid和的原因int。 int体积更小,速度更快,易于记忆,并按时间顺序排列。至于Guid,我发现的唯一优势是它是独一无二的。在那种情况下,a Guid会比更好int,为什么? 从我所看到的来看,int除了数量上的限制外没有其他缺陷,在许多情况下这是无关紧要的。 为什么要精确Guid创建?实际上,我认为它除了用作简单表的主键外,还有其他用途。(是否有用于实际应用的示例Guid?) (Guid = UniqueIdentifier)SQL Server上的类型

3
MD5字段的最佳数据类型是什么?
我们正在设计一个读取量很大的系统(每分钟读取数万次)。 有一个表names,可以作为一种中央注册表。每行都有一个text字段representation和一个唯一字段,该字段key是该字段的MD5哈希值representation。1该表当前具有数千万条记录,并且预计在应用程序的生命周期内将增长到数十亿条。 还有许多其他表(具有高度变化的模式和记录计数)引用该names表。这些表之一中的任何给定记录都保证有一个name_key,从功能上讲,该names表是该表的外键。 1:顺便说一句,正如您所料,此表中的记录一旦写入便是不可变的。 对于除表以外的任何给定表names,最常见的查询将遵循以下模式: SELECT list, of, fields FROM table WHERE name_key IN (md5a, md5b, md5c...); 我想针对读取性能进行优化。我怀疑我的第一站应该是最小化索引的大小(尽管我不介意在那里被证明是错误的)。 问题:和列 的最佳数据类型是什么? 有没有理由使用过?还是?keyname_keyhex(32)bit(128)BTREEGIN

2
SQL Server UniqueIdentifier / GUID内部表示
我的一个同事给我发了一个有趣的问题,我无法完全解释。 他运行了一些代码(包括在下面),并从中获得了一些意外的结果。 本质上,将UniqueIdentifier(从现在开始,我将其称为)类型Guid转换为binary(或varbinary)类型时,结果的前半部分的顺序是向后的,但后半部分的顺序不是。 我的第一个想法是,系统的字节序是原因,并且Guid保留了显示,但是binary不能保证形式。 显然,这是一个实现细节,但是我想知道是否对此有一个很好的解释。 码: declare @guid uniqueidentifier = '8A737954-CBEC-40CE-A534-2AFFB5A0E207'; declare @binary binary(16) = (select convert(binary(16), @guid)); select @guid as [GUID], @binary as [Binary]; 结果: GUID Binary 8A737954-CBEC-40CE-A534-2AFFB5A0E207 0x5479738AECCBCE40A5342AFFB5A0E207 如您所见,Guid(一直到40CE)的前半部分对于每个部分都向后存储。也就是说,的第一部分Guid向后,然后是第二部分,然后是第三部分,但是保留了这些部分的顺序。之后,最后两节将按照它们在中显示的确切顺序进行存储Guid。 谁能解释一下?(下面包括一个更大的测试集。) 码: declare @guid_to_binary table ( [id] int identity(1,1), [guid] uniqueidentifier, [binary_conversion] binary(16) ); declare @i int = 1; …

3
在SQL Server中安全地生成UNIQUEIDENTIFIER
我打算将a UNIQUEIDENTIFIER作为访问密钥,用户可以用来访问某些数据。在这种意义上,密钥将充当密码。 我需要在INSERT...SELECT语句中生成多个这样的标识符。出于架构原因,在这种情况下,我想在服务器端生成标识符。 如何生成安全随机的UNIQUEIDENTIFIER?注意,这NEWID不会足够随机,因为它根本不保证任何安全属性。我正在寻找与System.Security.Cryptography.RandomNumberGenerator等效的SQL Server,因为我需要不可猜测的ID。基于的任何内容CHECKSUM,RAND或GETUTCDATE也不符合条件的内容。

5
用于“巨大”数据库表PK的顺序GUID或bigint
我知道这类问题很多,但是我还没有阅读任何有说服力的论点来帮助我做出这个决定。请多多包涵! 我有一个庞大的数据库-它每天增长大约10,000,000条记录。数据是关系数据,出于性能原因,我将表与BULK COPY一起加载。因此,我需要为行生成键,并且不能依赖IDENTITY列。 64位整数(bigint)足够我使用,但是为了保证唯一性,我需要一个集中生成器来为我创建ID。我目前有这样的生成器服务,该服务允许服务保留X序列号并保证不发生冲突。但是,这样做的结果是,我拥有的所有服务都依赖于该集中式生成器,因此我在分配系统方面受到限制,并且对施加的其他依赖项(例如要求网络访问)不满意通过这种设计。有时这是一个问题。 我现在正在考虑使用顺序GUID作为主键(在SQL外部生成)。从我自己的测试中可以确定的是,这些操作的唯一缺点是较宽数据类型的磁盘空间开销(索引中使用它们会加剧这种情况)。与bigint相比,我还没有看到查询性能的任何明显下降。使用“批量复制”加载表的速度稍慢,但幅度不大。得益于我的顺序GUID实现,基于GUID的索引不会变得零散。 基本上,我想知道的是,是否还有我可能忽略的其他注意事项。目前,我倾向于飞跃并开始使用GUID。我绝不是数据库专家,所以我非常感谢任何指导。

3
在SQL Server 2012中索引PK GUID
我的开发人员已将其应用程序设置为将GUID用作几乎所有表的PK,并且默认情况下,SQL Server已在这些PK上设置了聚集索引。 该系统还比较年轻,我们最大的表刚刚超过一百万行,但是我们正在研究索引并希望能够迅速扩展,因为不久的将来可能会需要它。 因此,我的第一个倾向是将聚集索引移动到创建的字段,该字段是DateTime的bigint表示形式。但是,使CX唯一的唯一方法是在此CX中包括GUID列,但先创建顺序。 这会导致群集密钥太宽,是否会提高写入性能?读取也很重要,但是此时写入可能是一个更大的问题。

8
标识列或UDF显式生成唯一ID?
我正在就是否最好PRIMARY KEY使用Identity Columns(我们明确使用生成唯一ID的UDF)进行辩论。 我在为“身份栏”争论。 他说,我的搭档正在争吵手动生成值 通过将UDF放在另一个可以放置UDF的桌子上 锁定资源 用一个称为ID_Value的字段递增ID表1 使用它作为全局唯一标识符 或者id+1在插入时让表格做一个 在没有标识约束的服务器和/或环境之间移动数据更容易;从一个有数据的数据库移动到另一个具有类似暂存数据或虚拟数据的类似数据库。对于非生产中的测试,我们可能希望将昨天的所有记录拉到暂存阶段进行测试。 哪种实现更有意义?

2
我应该使用UUID还是ID
我已经在系统中使用UUID一段时间了,原因有很多,从日志记录到延迟的关联。随着我变得越来越幼稚,我使用的格式发生了变化: VARCHAR(255) VARCHAR(36) CHAR(36) BINARY(16) 当我到达最后一个时BINARY(16),我开始将性能与基本自动递增整数进行比较。测试和结果如下所示,但如果你只是想总结,表示INT AUTOINCREMENT和BINARY(16) RANDOM对数据相同的性能范围高达20万(该数据库已预先填充之前测试)。 最初,我对将UUID用作主键持怀疑态度,确实确实如此,但是我发现这里有潜力创建一个可以同时使用两者的灵活数据库。尽管许多人强调这两种方法的优点,但同时使用这两种数据类型可以消除哪些缺点呢? PRIMARY INT UNIQUE BINARY(16) 这种类型的设置的用例将是表间关系的传统主键,并且具有用于系统间关系的唯一标识符。 我本质上试图发现的是两种方法之间的效率差异。除了所使用的四倍磁盘空间(在添加其他数据后可能几乎可以忽略不计)外,在我看来它们是相同的。 架构: -- phpMyAdmin SQL Dump -- version 4.0.10deb1 -- http://www.phpmyadmin.net -- -- Host: localhost -- Generation Time: Sep 22, 2015 at 10:54 AM -- Server version: 5.5.44-0ubuntu0.14.04.1 -- PHP Version: 5.5.29-1+deb.sury.org~trusty+3 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; …

2
如何通过表字段的组合使用唯一键?
看看下面的sqlfiddle:http ://sqlfiddle.com/#!2/dacb5/1 CREATE TABLE contacts ( id int auto_increment primary key, name varchar(20), network_id int, network_contact_id int ); INSERT INTO contacts (name, network_id, network_contact_id) VALUES ('John', 4, 10), ('Alex', 4, 11), ('Bob', 4, 12), ('Jeff', 4, 45), ('Bill', 7, 11), ('Walter', 7, 45), ('Jessie', 7, 360) ; 我有一个基本的联系表。该network_id和network_contact_id字段包含链接到其他表的ID号码。 我希望能够运行INSERT IGNORE查询,此表,但我想用的组合network_id,并network_contact_id作为唯一键来匹配。 …


4
这是设计数据库的标准方法吗?
我最近了解了如何在工作中的数据库中定义关系,并且想知道这是否是标准做法。 假设我们有两个流程:流程A和流程B。流程B取决于流程A的结果,因此需要在流程B运行和流程A运行之间定义一种关系。关系的定义方式如下: TableProcessA: Id 和 TableProcessB: Id ProcessAId 现在,到目前为止,事情对我来说还是有意义的,但是后来事情对我和我对表格设计的理解变得有些奇怪。每当在TableProcessA或TableProcessB中创建一行时,都会调用一个函数,该函数为每个函数创建一个全局唯一的ID。因此,基本上,TableProcessA和TableProcessB中的所有Id字段都将不包含任何匹配项,因为Id不仅是其表唯一的,而且对于整个数据库都是唯一的。 我的问题是,这是什么标准?我想到了一个想法,即每个表都应该仅具有一个自动递增的ID,该ID仅对表而不对整个数据库唯一。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.