主键使用 newid() 和 Int 哪个效率高?
一直以为 int做主键 比 newid() 做主键效率高
今天在网上看了一篇文章,
说 主键使用 Newid() 比 使用 Int 效率高....
求解...
http://blog.163.com/ny_lonely/blog/static/1889242732011520111817929/
------解决方案--------------------有问题,文章没有说效率比INT高
------解决方案--------------------NEWID至少比INT存储的东西都多哇。索引页存储的东西就少了
------解决方案--------------------
1、newid长度长,像4楼说的,每个页面存放的数量就会少,查询时要访问的数据页就多,通俗点说,就是I/O会更高。性能不见得好。
2、3楼说的newid无序,不适合做聚集索引,是正确的。
3、对于数据库底层操作而言。由于数值型变成16进制时是明确的。而字符型或者其他类型到了底层会存在一些不可预知性。这样需要额外的信息来确定数据。所以一般建议使用数值型来做主键及索引,补充一下,最快的运算操作是2进制,其实也就是SQLServer的bit类型。但是由于索引需要考虑选择性,所以不建议使用bit类型来做索引。选择性不高。
4、newid号称3000年内不会重复,但是几乎没有项目需要这么旧。int类型足够存放2亿数据。对于大部分项目来说绰绰有余。
5、你的文章仅仅突出不重复,而不是高效。
6、由于newid的不确定性,在匹配时,比如表关联,会有一定的内耗。
综上所述,不建议在非常特殊的情况下使用newid来做主键或者索引