转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> Delphi程序 >> 正文
Integer GUID和Comb做主键的效率测试(Delphi+access)(一)         ★★★★

Integer GUID和Comb做主键的效率测试(Delphi+access)(一)

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2699 更新时间:2009/4/23 18:25:46

 

对于数据系统表的主键选择不是什么大不了的事,可能对于一些朋友来说,这非常容易,可是却不是如此的简单,对于某些应用来说,自动加1字段就可以了,但是对于某些系统来说,选择自动加1 的方式会带来很大的麻烦,在此种方法的解决上,基本上大多数网友都选择了GUID做为主键,但是选择GUID做为主键的方式有一个缺点:大家都知道GUID是一个128位的整数(32*4),他占用的存诸空间是整数的四倍! 在查询效率方面会不会有很大的影响呢?在这方面,Jimmy Nilsson做了很深的研究(请参见他的著名的文章”The Cost of GUIDS as Primary Keys” http://lists.sqlmagcom/t?ctl=CFBD:83A5C),国内有很多朋友对GUIDcomb方式进行了比较,但是大多数是在sql平台上做的,对于GUID字段的支持只有Accesssql 支持,其他的数据库可能并不支持这种方式,所我对这种方式进行了如下的测试.

 

对于不支持GUID字段的数据库,唯一的方式是对GUID值转化成字符串,也就是说最少需要32*8字节来存GUID(他的转化方式是将GUID的十六进制形式转化为了’0..9’’A...F’,Base64方法需要更少的存储空间,但是由于BASE64里面即包含大写字每也包含小写字每,所以不适宜表达GUID).我的测试里面包含了四项 1.自动加1字段,2.GUID字符串,3 comb字符串,4.comb后六个字节放在前面,方便字符串的比较,特别是做主键的时候.

 

Jimmy Nilsson The Cost of GUIDS as Primary Keys里对GUID的生成做了详细的说明:

“The algorithm for generating GUIDs doesn’t use the MAC address of the network card in recent Windows versions anymore.Instead ,it just creates a random value.In theory,this presents a risk of getting duplicate GUIDs,but,in practice,it shouldn’t be a problem”

“The reason for excluding the use of the MAC address is that it not only couples users to GUIDs,but some network cards don’t use unique MAC address.”

 

对于这个情况,Jimmy Nilsson还分别在nt 4+sql 7 windows 2000+ sql 2000上做了实验,实验证明确实如此,GUID16位随机数当中,15.5位是随机的,怎么出来个15.5?是这样的,如果你按照半个字节来数的话,13,也就是第7位的上半个字节是固定的.\

 

{43A6162C-308A-4112-86F8-6E6B6B76FC6E}

也就是这个示例当中的第三组4112中的第一个字符4是固定的, 他代表16进制的4,0100,所以是半个字节.他代表Microsoft.

 

在我们这个实验中,,GUID的方法肯定会慢,但是慢多少呢?2,3,4理应该是效率一至的,呵呵,你敢确定你的结论吗? Let’s try!

 

先把算法贴出来吧:

常量定义单元,定义了一个时间的基准值

//********************************************************************

//

// Name   : Sinoprise Function Library For Delphi

//

//Author  :     Shuguang Yin

//Create  :     2005-11-15

//

// Copyright (c) 2005 : Sinoprise Technology Lab

// Official WebSite   : http://www.sinoprise.com

// Sinoprise Technology Community : http://www.winux.cn

//

//********************************************************************

//

//Unit Name : SConstUnit

//

//Function :

//

//********************************************************************

unit SConstUnit;

 

interface

[1] [2] [3] [4]  下一页


[VB.NET程序]Read a byte, integer or long from memory  [VB.NET程序]源代码推荐:vb的GUID生成算法
[Delphi程序]在Delphi中通过函数获取GUID  [Delphi程序]Integer GUID和Comb做主键的效率测试(Delphi+acce…
[Delphi程序]Integer GUID和Comb做主键的效率测试(Delphi+acce…  
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台