主键使用 newid() 和 Int 哪个效率高?

bean_sql 2012-06-19 05:24:48
一直以为 int做主键 比 newid() 做主键效率高

今天在网上看了一篇文章,
说 主键使用 Newid() 比 使用 Int 效率高....
求解...


http://blog.163.com/ny_lonely/blog/static/1889242732011520111817929/
...全文
278 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
lycorisraya 2012-06-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
1、newid长度长,像4楼说的,每个页面存放的数量就会少,查询时要访问的数据页就多,通俗点说,就是I/O会更高。性能不见得好。
2、3楼说的newid无序,不适合做聚集索引,是正确的。
3、对于数据库底层操作而言。由于数值型变成16进制时是明确的。而字符型或者其他类型到了底层会存在一些不可预知性。这样需要额外的信息来确定数据。所以一般建议使用数值型来做主键及索引,补充一下,最快的运算操作是2……
[/Quote]
分析的好,曾经还纠结于用int还是guid做主键,现在看来完全不必自寻烦恼了!
發糞塗牆 2012-06-19
  • 打赏
  • 举报
回复
1、newid长度长,像4楼说的,每个页面存放的数量就会少,查询时要访问的数据页就多,通俗点说,就是I/O会更高。性能不见得好。
2、3楼说的newid无序,不适合做聚集索引,是正确的。
3、对于数据库底层操作而言。由于数值型变成16进制时是明确的。而字符型或者其他类型到了底层会存在一些不可预知性。这样需要额外的信息来确定数据。所以一般建议使用数值型来做主键及索引,补充一下,最快的运算操作是2进制,其实也就是SQLServer的bit类型。但是由于索引需要考虑选择性,所以不建议使用bit类型来做索引。选择性不高。
4、newid号称3000年内不会重复,但是几乎没有项目需要这么旧。int类型足够存放2亿数据。对于大部分项目来说绰绰有余。
5、你的文章仅仅突出不重复,而不是高效。
6、由于newid的不确定性,在匹配时,比如表关联,会有一定的内耗。
综上所述,不建议在非常特殊的情况下使用newid来做主键或者索引
SQL777 2012-06-19
  • 打赏
  • 举报
回复
NEWID至少比INT存储的东西都多哇。索引页存储的东西就少了
昵称被占用了 2012-06-19
  • 打赏
  • 举报
回复
一般情况,我们往往把主键设置为聚集

但是GUID时很不适合聚集的,因为它产生时无序的,聚集最好是后添加的,可以减少聚集的页分裂浪费性能
昵称被占用了 2012-06-19
  • 打赏
  • 举报
回复
有问题,文章没有说效率比INT高
昵称被占用了 2012-06-19
  • 打赏
  • 举报
回复
这个是否有问题?

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧