NEWSEQUENTIALID() 和 NEWID()都可以产生uniqueidentifier类型的,GUID.NEWID()产生的GUID是无序的,随机的。
而NEWSEQUENTIALID()是SQL SERVER2005新特性,NEWSEQUENTIALID是基于硬件(一定程度上)生成的GUID以十六进制间隔递增.

官方的解释?
SQL SERVER 2005中新增了一个NEWSEQUENTIALID的函数,MSDN的解释是:
在指定计算机上创建大于先前通过该函数生成的任何 GUID 的 GUID。
NEWSEQUENTIALID() 不能在查询中引用,不能执行类似SELECT NEWSEQUENTIALID()的语句;
它只能与 uniqueidentifier 类型表列上的 DEFAULT 约束一起使用。
只有当计算机没有网卡时,NEWSEQUENTIALID() 生成的 GUID 才在该特定计算机中是唯一的,反之只有当计算机有网卡时,生成的GUID才是全球唯一。

差异性?
1.newsequentialid 函数比起 newid 函数最大的好处是:如果你在一个 UNIQUEIDENTIFIER 字段上建立索引,使用 newid 产生的新的值是不固定的,所以新的值导致索引B+树的变化是随机的。而 newsequentialid 产生的新的值是有规律的,则索引B+树的变化是有规律的,以减少叶级别索引上的页争用。有规律和无规律就会带来性能的改进。

2.UNIQUEIDENTIFIER做主键(Primary Key)是一件很方便的事情,在数据合并等操作中有不可替代的优势
但是由于普通的GUID的分散性使得如果主键加上聚集索引(Clustered Index)会导致在插入记录时效率大大降低。

性能改进体现在哪里?
数据库中增加记录时,对索引的B+树的操作,其实就是对左右叶子节点,上级节点的操作。
而找到这几个节点后的操作,在实际上,都不是性能消耗最大的地方。性能消耗最大的地方在于搜索找到需要操作的叶子节点。
对于 B+ 树来说, 几层的B+ 树,找到叶子节点就需要找几个数据页。那为何说 Guid 有规律时速度要比无规律时候快呢?
原因很简单:
1、缓存的命中率问题
你可以参看我之前写的这篇文章:理解缓存 http://database.ctocio.com.cn/tips/219/7791219.shtml
当每次产生的Guid是有规律时,找到需要操作的叶子节点的几个中间节点,可能已经在之前的访问中被缓存了。
这样,系统不需要大量的读入缓存命中率很低的索引数据页,这样可以节省内存,同时提高搜索速度。
2、连续和不连续的磁盘 I/O 操作对性能的影响
我们都知道,现在很多业务逻辑的瓶颈是硬盘的速度。而硬盘速度提升的空间仍然不大。下面对硬盘读写操作的一些法则对我们优化跟硬盘I/O有关的方面很有帮助。
请记住下面的经验法则:标准的 Wide Ultra SCSI-3 硬盘每秒钟可为 Windows 和 SQL Server 提供75个不连续(随机)的 I/O 操作和 150 个连续的 I/O 操作。这种硬盘的标称传输率在 40 MB/秒左右。请记住更有可能限制数据库服务器的传输率是每秒钟 75/150 I/O,而不是 40 MB/秒。
读/写磁头和相关的磁盘取数臂需要移动才能在 SQL Server 和 Windows 所要求的硬盘盘片的位置上进行查找和操作。如果数据所在的硬盘盘片的位置不连续,硬盘驱动器要花多得多的时间才能将磁盘取数臂和读/写磁头移动到所有需要的硬盘盘片位置。如果所需要的数据全部位于硬盘盘片上的连续物理扇区,情况则相反,磁盘取数臂和读/写磁头只需进行很小的移动就能完成所需磁盘 I/O 操作。连续和不连续的情况下所花的时间有很大的差异,每个不连续的数据查找大约要花 50 毫秒,而连续的数据查找则只需大约 2-3 毫秒。请注意这些值是粗略估计出来的,具体值将取决于不连续的数据在磁盘上分布的疏密、硬盘盘片的旋转速度 (RPM) 以及硬盘的其它物理属性。主要要记住的一点是连续 I/O 有益于 SQL Server 性能。之前已提到标准的硬盘支持每秒 75 个不连续的 I/O 和每秒 150 个连续的 I/O。还要记住的重要一点是读或写 8KB 的时间与读或写 64 KB的时间几乎相同。在 8 KB 到 64 KB 范围之内,单个磁盘 I/O 传输操作所花的时间主要是磁盘取数臂和读/写磁头运动的时间。因此,从数学上来讲,当需要传输 64 KB 以上的 SQL 数据时,尽可能地执行 64 KB 磁盘传输是有益的,因为 64 KB 传输基本上与 8 KB 传输一样快,而每次传输的 SQL Server 数据是 8 KB 传输的 8 倍。请记住 Read-Ahead Manager 以 64 KB 字节片(也称为 SQL Server 扩展盘区)执行磁盘操作。Log Manager 也以较大的 I/O 传输量来执行连续写操作。要记住的主要事项是充分利用 Read-Ahead Manager,并将 SQL Server 日志文件与其它非连续存取的文件分开,以有效提高 SQL Server 的性能。

NEWSEQUENTIALID() 和 NEWID()都可以产生uniqueidentifier类型的,GUID.NEWID()产生的GUID是无序的,随机的。而NEWSEQUENTIALID()是SQL SERVER2005新特性,NEWSEQUENTIALID是基于硬件(一定程度上)生成的GUID以十六进制间隔递增.官方的解释?SQL SERVER 2005中新增了一个NEWSEQUENT...
在SQL Server ,随机函数有rand(), New ID (),其 rand是在0到1内随机取数, New ID 则是生成随机的unique id entifier唯一标识符。 SELECT * FROM Northwind..Orders ORDER BY NEW ID () –随机排序 SELECT TOP 10 * FROM Northwind..Orders ORDER BY NEW ID () –从Orders表 随机取出10条记录 A.对变量使用 NEW ID 函数 以下示例使用 NEW ID () 对声明为 unique id entifier 数据类型的变量赋值。在测试 unique id en
这会引入新的UNIQUE ID ENTIFIER数据类型列,SQL Server会在那列上进行物理排序操作。 但是在记录集里列本身没有返回,因为ORDER BY子句在查询SELECT部分逻辑后发生,因此也不会改变记录集。 在SQL Server里,简单但很强大的方法用来随机化你的记录集。 以上所述就是本文的全部内容,希望大家可以喜欢。 您可能感兴趣的文章: SqlServer 备份数据
从A表随机取2条记录,用SELECT TOP 10 * FROM ywle order by new id () order by 一般是根据某一字段排序, new id ()的返回值 是unique id entifier ,order by new id ()随机选取记录是如何进行的 new id ()在扫描每条记录的时候都生成一个值, 而生成的值是随机的, 没有大小写顺序. 所以最终结果再按这个排序, 排序的
MSDN的解释是: 在指定计算机上创建大于先前通过该函数生成的任何 GU ID 的 GU ID NEW SEQUENTIAL ID () 不能在查询 引用,不能执行类似SELECT NEW SEQUENTIAL ID ()的语句; 它只能与 unique id entifier 类型表列上的 DEFAULT 约束一起使用。 只有当计算机没有网卡时, NEW SEQUENTIAL ID () 生成的 GUI.
要在SQL Server 随机抽取50条数据,可以使用以下方法: 1.使用 NEW ID ()函数对表 的每一行分配一个随机的唯一标识符,并将结果存储在一个临时表 。然后,从这个临时表 选择前50行: SELECT TOP 50 * FROM ( SELECT *, NEW ID () As _ new id FROM [table_name] ORDER BY t._ new id 2.使用RAND()函数生成随机数,并将结果与表 的行数相乘。然后,将结果舍入到最接近的整数,以获得要跳过的行数。接下来,使用OFFSET FETCH子句来选择50行记录: SELECT * FROM [table_name] ORDER BY RAND() OFFSET CAST((SELECT COUNT(*) FROM [table_name]) * RAND() AS INT) ROWS FETCH NEXT 50 ROWS ONLY 以上两种方法都可以在SQL Server 随机抽取50条数据,但第一种方法可能更简单明了。无论使用哪种方法,都应该先对表创建一个适当的 索引 ,以提高性能。