<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="RSS_xslt_style.asp" version="1.0" ?>
<rss version="2.0" xmlns:WebWizForums="http://syndication.webwiz.co.uk/rss_namespace/">
 <channel>
  <title>DevForce Community Forum : GUID Keys and DataBase Performance</title>
  <link>http://www.ideablade.com/forum/</link>
  <description>This is an XML content feed of; DevForce Community Forum : DevForce Classic : GUID Keys and DataBase Performance</description>
  <pubDate>Fri, 17 Apr 2026 17:57:45 -700</pubDate>
  <lastBuildDate>Wed, 06 Jun 2007 12:11:15 -700</lastBuildDate>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Web Wiz Forums 9.69</generator>
  <ttl>360</ttl>
  <WebWizForums:feedURL>www.ideablade.com/forum/RSS_post_feed.asp?TID=38</WebWizForums:feedURL>
  <image>
   <title>DevForce Community Forum</title>
   <url>http://www.ideablade.com/forum/forum_images/IdeaBlade_logo_tm.png</url>
   <link>http://www.ideablade.com/forum/</link>
  </image>
  <item>
   <title>GUID Keys and DataBase Performance : &#8220;Here is my annotated, Universal...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=38&amp;PID=99#99</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=21" rel="nofollow">IdeaBlade</a><br /><strong>Subject:</strong> 38<br /><strong>Posted:</strong> 06-Jun-2007 at 12:11pm<br /><br /><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT size=2><FONT face="Times New Roman"><EM>“Here is my annotated, Universal Time version of the C#&nbsp;Guid.Comb described in the email that begins as shown below.<SPAN style="FONT-SIZE: 12pt"><?:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><O:P></O:P></SPAN></EM></FONT></FONT></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT size=2><FONT face="Times New Roman"><EM>I've tweaked the Audit in Cabana to use it.<SPAN style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></EM></FONT></FONT></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT size=2><FONT face="Times New Roman"><EM>I still suspect that an Audit table that uses a bigint (long) identity column might be better from a space perspective at least (although you could eliminate the ModTs now and recover that info from the Guid.Comb itself !)<SPAN style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></EM></FONT></FONT></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT size=2><FONT face="Times New Roman"><EM>I've kept that version around (Audit2) if anyone cares to see it.”<SPAN style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></EM></FONT></FONT></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT size=2><FONT face="Times New Roman"><?:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><ST1:PERS&#111;NNAME w:st="&#111;n"><EM>Ward Bell</ST1:PERS&#111;NNAME><SPAN style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></EM></FONT></FONT></P><P style="MARGIN: 0in 0in 0pt" ="Questi&#111;n"><strong><EM><FONT face="Times New Roman" size=3>Answer (by <ST1:PERS&#111;NNAME w:st="&#111;n">Ward Bell</ST1:PERS&#111;NNAME>):</FONT></EM></strong></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2>I<EM> said that I thought the impact would be marginal. From a space perspective, it is the difference between an 8 byte id (long, bigint) that we typically recommend and the 16 bytes of a Guid.</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2><EM>But I'm not a SQL expert by any means so I thought I'd do a little more research.</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2><EM>WARNING: The following is a long and rambling ensemble of my thoughts and bits clipped from around the net. Read on only if you are interested.</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT size=2><FONT face="Times New Roman">&nbsp;</FONT><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: 'Times New Roman'"><EM>If I had to sum it up: Guids are tempting but could endanger performance. It appears that Guid.Combs, which are "COMBinations of Guid and current datetime) may be a better approach. Guid.Combs are easily calculated on the client side.</EM></SPAN></FONT></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2><EM>OK - read on if you want. This is more stream of consciousness than I intended as it captures info as I discovered it. I hope to clean it up later.</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2>====</FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2><EM>It seems that the performance story is a little more complicated.&nbsp;The way I read it, Guids are&nbsp;often OK; you just have to make sure your application is aligned with Guid strengths and weaknesses.</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT size=2><EM><FONT face="Times New Roman">&nbsp;</FONT><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">&#091;See below for a discussion of pros and cons&#093;</SPAN></EM></FONT></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2><EM>Their intended purpose is to support records that need global uniqueness and/or in replication scenarios. Any application which expects to operate off-line for a period of time is made much easier to program and maintain by the use of Guids.</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2><EM>On the other hand,&nbsp;performance concerns become serious if you are going to have millions of rows or lots of inserts. Sure we have disk space to burn but disk I/O remains precious and shouldn't be squandered. Guid columns should not be in a clustered index&nbsp;but it is easy to forget that when minting new tables as clustered index is&nbsp;the default for primary keys.</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2><EM>In particular, I am&nbsp;regretting my&nbsp;use of Guids for Audit records because (a) they are never germane to off-line scenarios and (b) we insert them in droves, and (c) we hardly ever do anything with them. We also neglected to make the Guid pk a non-clustered index in our Tutorial database which is an absolutely critical error. Every way I look at them it seems they are the wrong choice for an Audit table. They might make sense if there was a replication issue (e.g., writing to multiple databases and then consolidating them through replication) but even here I'd look to some other trick (e.g, a composite key of {autoincrementing bigint, small-int-marker-for-the-db}.</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2><EM>I have a revised Audit table (called Audit2) and companion mechanism that uses SQL Server's autoincrement and does not rely upon our fix-up logic for such columns. It involves a hack (I'll ask Jay for something more proper here) and it still awaits the mechanism needed to block re-read but it works.</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT size=2><EM><FONT face="Times New Roman">&nbsp;</FONT><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">&#091;THIS JUST IN&#093; I just learned about COMBS (see below). Now I'm thinking of going back to that approach. Stay tuned.</SPAN></EM></FONT></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2><EM>There is a technique for generating GUID equivalents on a client that ensures monotonically increasing values that are globally unique nonetheless. They are called COMBs. You'll see my discussion of them way below.</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2><EM>Finally, I think it is reasonable to have a mix of Guid and non-Guid primary keys.</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2><EM>Anyway, on with the story</EM></FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT size=2><FONT face="Times New Roman">&nbsp;</FONT><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">====</SPAN></FONT></P><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-ansi-: EN-US; mso-fareast-: EN-US; mso-bidi-: AR-SA">Here is an article with some actual metrics: <DIV></DIV><a href="http://www.sql-server-per&#102;ormance.com/zn_guid_per&#102;ormance.asp" target="_blank">http://www.sql-server-performance.com/zn_guid_performance.asp</A> <DIV></DIV><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">The author starts out terrified of Guids and, after analysis, comes around.</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><EM>Certainly the most horrifying statistic is an insert comparison in which timing difference between Guid and non-Guid inserts is 45,191 seconds to 1,630!&nbsp; That means integer inserts are 45 times faster than Guid inserts.</EM></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><EM>On closer inspection we see that the problem stems from doing 4,000,000 individual inserts. The 4,000,000 integer inserts involved consecutive ids; the 4,000,000 Guid inserts were random Guids. The randomness of the Guids causes tremendous page fragmentation - although some tuning might have helped. The consecutive integers slipped right into place. Note that when the Guids were forced to be consecutive (the 3rd case tested), the time was 2,025 - an insignificant difference from the integer 1,630. &#091;BTW, I don't know if he was using clustered index for his Guid test; that would be a killer&#093;</EM></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><EM>I don't know if your application is likely to make 4,000,000 inserts in a short amount of time; if so, Guids of this kind are not for you - but SEQUENTIAL GUID might be.</EM></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><EM>More interesting is that the read statistics were a wash until you start fetching a ton (e.g., 70,000 records). </EM></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><EM>He concludes: </EM>"</SPAN><FONT face="Times New Roman">So in short, it looks as though if you plan carefully and design wisely, then the use of the uniqueidentifier can perform as well in SELECT statements as an integer. Inserts are a different story, and we already discussed, that as long as they are sequential values, it really shouldn't matter. </FONT><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">"</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><EM>Aside: He doesn't do a straight Guid to single, integer Id comparison. The scenario calls for a solution to a situation in which clients talk to different databases and the results are later pooled in a central db. A Guid Id is perfect for the case; an simple integer id won't work because there would be id collisions when the different dbs merged data. So he suggests a composite id consisting of {integerId, databaseId}. I think this is a bad idea because composite keys are dreadful for foreign key lookups. I would have turned first to a reserved range approach in which the high (or low) digits of a long were used to distinguish the databases.<O:P></O:P></EM></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><EM>None of this really effects the analysis I don't think because the&nbsp;differences in&nbsp;insert performance have to do with the randomness of the Guid inserts more than the size of Guids themselves.<O:P></O:P></EM></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><EM><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">I should add Jim's findings about Guids in DevForce applications. The statistics quoted concern SQL performance but what of the impact on clients? Jim observes that with Guids there is no id-fixup processing before inserts. Every other id generation approach requires id fixup.</SPAN><SPAN style="FONT-SIZE: 12pt"><O:P></O:P></SPAN></EM></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><EM>His experience (unmeasured as yet) is that client save performance is much improved when there is no id-fixup. This is not surprising because any id-fixup means a trip to the server - and any trip to the server hurts client responsiveness, especially over poor connections.</EM></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><EM>===</EM></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><EM>A Guid column should never be in a clustered index because a clustered index is only good for monotonically increasing narrow columns and a Guid is neither. Use your one-clustered-index-per-table allowance on something that fits.</EM></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">====== PROS AND CONS OF GUIDS =====</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">First, here's a summary tidbit from Scott Bellware who is an MVP with lots of database and object model credentials</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><B style="mso-bidi-font-weight: normal"><FONT face="Times New Roman"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Times New Roman'; mso-ansi-: EN-US; mso-fareast-: EN-US; mso-bidi-: AR-SA"><a href="http://%28codebetter.com/user/Profile.aspx?UserID=2342%29%20" target="_blank">(http://codebetter.com/user/Profile.aspx?UserID=2342)</A> </SPAN><O:P></O:P></FONT></B></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT face="Times New Roman">I typically prefer GUIDs for ID's in place of integers <EM>if the integer ID's have to be generated by a database server</EM>.&nbsp;&#091;<SPAN style="COLOR: navy">emphasis mine; this leaves open the question of integer ids generated on the client ... which is how we do it until the moment we actually insert.</SPAN>&#093;<BR><BR>I've never really been comfortable with the idea that an abstraction like a &nbsp;business object - something that can be used for more than persistence to the application's database &nbsp;- must get it's ID from an external, and very likely, distributed system. &nbsp;Since a GUID's uniqueness is ensured algorithmically, and since it can be done in the same local memory space as the object that it identifies, it seems a bit off to me that we'd defer to a remote dependency for something that is easily had locally, and that can be kept close to the object that is its primary client, and that is most concerned with it. <BR><BR><strong>Since SQL Server 2005 has addressed the index fragmentation issue with GUID-based indexes, and since the COMB GUID generation code is easily had, GUIDs are a much easier decision to make.</strong> &#091;<SPAN style="COLOR: navy">emphasis mine.</SPAN><SPAN style="COLOR: black">&#093;</SPAN><BR><BR>That said, there are still compelling reasons to use integer ID's, but the vast majority of database apps aren't of the ilk that require integer ID's specifically.</FONT></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT face="Times New Roman">August 22, 2006 12:15 AM </FONT></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">----</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Now for an article by </SPAN><strong><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-bidi-font-family: 'Times New Roman'">Jimmy Nilsson</SPAN></strong><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">&nbsp;that lays it out.</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><B style="mso-bidi-font-weight: normal"><SPAN style="FONT-SIZE: 12pt"><FONT face="Times New Roman">Pros and Cons of GUIDs as Primary Keys</P><DIV></DIV><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><a href="http://%28www.in&#102;ormit.com/articles/article.asp?p=25862&amp;seqNum=5&amp;rl=1%29" target="_blank">http://(www.informit.com/articles/article.asp?p=25862&amp;seqNum=5&amp;rl=1)</A></P><DIV></DIV><P>Let's say that we plan to use GUIDs for the primary keys. What are the advantages and disadvantages when compared to <TT><SPAN style="FONT-SIZE: 10pt">INTEGER</SPAN></TT>s? We should always start with the positive, so here goes:</P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN>We get a more object ID–like datatype because each primary key typically will be unique for the complete database. This gives good effects, for example, when designing a custom solution for pessimistic locking (but that's another long story).</P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><TT><SPAN style="FONT-SIZE: 10pt">@@IDENTITY</SPAN></TT> has been a source of problems when <TT><SPAN style="FONT-SIZE: 10pt">INSERT</SPAN></TT> triggers have <TT><SPAN style="FONT-SIZE: 10pt">INSERT</SPAN></TT>ed rows into other tables with <TT><SPAN style="FONT-SIZE: 10pt">IDENTITY</SPAN></TT>s. (You can use <TT><SPAN style="FONT-SIZE: 10pt">SCOPE_IDENTITY()</SPAN></TT> in SQL Server 2000 to avoid this problem.)</P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN>You can move the creation processing of the values from the data tier to the business or consumer tiers. For example, the consumer can create complete structures of orders and details that can be sent all the way through the business tier to the data tier in one go, which can reduce the number of round trips. A more basic way of saying this is that you can get the ID value <I>before</I> you use it, not just afterward, as is the case with <TT><SPAN style="FONT-SIZE: 10pt">IDENTITY</SPAN></TT>s.</P><P style="MARGIN: auto 0in auto 0.5in" ="normaltitle">NOTE</P><P style="MARGIN-LEFT: 0.5in">In the case of .NET and ADO.NET, it's a big advantage to know the ID value at the time rows are added to the <TT><SPAN style="FONT-SIZE: 10pt">DataSet</SPAN></TT>. Otherwise, for example, autogenerated <TT><SPAN style="FONT-SIZE: 10pt">INSERT</SPAN></TT>s can't be used for master-detail relationships within the <TT><SPAN style="FONT-SIZE: 10pt">DataSet</SPAN></TT>.</P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN>The span of values for GUIDs is enough for most scenarios. <TT><SPAN style="FONT-SIZE: 10pt">INTEGER</SPAN></TT>s are not big enough for some scenarios. (By the way, with <TT><SPAN style="FONT-SIZE: 10pt">INTEGER</SPAN></TT>s, you don't have to start the seed on 1. You can just as easily start it on the smallest negative <TT><SPAN style="FONT-SIZE: 10pt">INTEGER</SPAN></TT> and thereby double the span of values.)</P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN>You can prepare for merge replication. When merge replication is to be used, each table to be replicated must have a GUID column (called ROWGUID in SQL Server). You also don't have to give each server in a merge replication scenario a unique set of values to use for the keys. The risk of duplicate GUIDs is so small that this shouldn't be a problem.</P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN><TT><SPAN style="FONT-SIZE: 10pt">IDENTITY</SPAN></TT> can't be used for tables in distributed partitioned views.</P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN>A GUID will not mean anything to the users. An <TT><SPAN style="FONT-SIZE: 10pt">INTEGER</SPAN></TT> can be read, understood, and remembered. It's common to see <TT><SPAN style="FONT-SIZE: 10pt">INTEGER</SPAN></TT> keys in the UI, and that might cause problems later.</P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l0 level1 lfo1; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN>You know what a nightmare it can be when doing a manual merge between two tables with <TT><SPAN style="FONT-SIZE: 10pt">INTEGER</SPAN></TT>s as primary keys. Not only do you have to create a new sequence for the union of both tables, but you also must change all the foreign keys for all the dependent tables. If GUIDs are used, this sort of problem does not arise.</P><P style="MARGIN: auto 0in auto 0.5in" ="normaltitle">NOTE</P><P style="MARGIN-LEFT: 0.5in">The algorithm for generating GUIDs doesn't use the MAC address of the network cards 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.</P><P style="MARGIN-LEFT: 0.5in">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 addresses.</P><P style="MARGIN-LEFT: 0.5in">I will discuss this further when we reach the section about the COMBs. Stay tuned.</P><P>I'm not a salesman, so here are a few drawbacks:</P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN>There is a huge overhead in size. As I said, a GUID is four times larger than an <TT><SPAN style="FONT-SIZE: 10pt">INT</SPAN></TT>. This is very important when it comes to indexes.</P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN>Portability can be a problem because not every database has GUID as a native datatype.</P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN>You can't use GUIDs with aggregates such as <TT><SPAN style="FONT-SIZE: 10pt">MIN</SPAN></TT>. This is unfortunate when it comes to using <TT><SPAN style="FONT-SIZE: 10pt">WHILE</SPAN></TT> plus an aggregate function, such as <TT><SPAN style="FONT-SIZE: 10pt">MIN</SPAN></TT> or <TT><SPAN style="FONT-SIZE: 10pt">MAX</SPAN></TT> for looping instead of a <TT><SPAN style="FONT-SIZE: 10pt">CURSOR</SPAN></TT>. (Well, a workaround is to use a <TT><SPAN style="FONT-SIZE: 10pt">CONVERT</SPAN></TT> or a <TT><SPAN style="FONT-SIZE: 10pt">CAST</SPAN></TT> to <TT><SPAN style="FONT-SIZE: 10pt">CHAR(36)</SPAN></TT> or <TT><SPAN style="FONT-SIZE: 10pt">BINARY(16)</SPAN></TT> of the GUID before it's used in the aggregate, but watch out for performance problems with large tables.) </P><P style="MARGIN-LEFT: 0.5in; TEXT-INDENT: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .5in"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Symbol; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: Symbol; mso-bidi-font-family: Symbol"><SPAN style="mso-list: Ignore">·<SPAN style="FONT: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN></SPAN>It's detrimental to developer-friendliness because it's really hard to edit GUIDs manually, to remember them when you browse the database, and so on. You have to get used to navigating the database by using SQL scripts, but this is not usually that much of a problem.</P><P>So, the overhead related to size is the main problem.</P><P><SPAN style="COLOR: navy; FONT-FAMILY: Arial">He goes on to test performance as described in the next section, GUID.COMBS</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2>==== GUID.COMBS =========</FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2>COMBS are a transform on ordinary GUIDs that result in a sequential Guids, thus overcoming the SQL insert problems caused by random Guids.</FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2>GUID.COMB stands for "COMBination of Guid and the current datetime".</FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><FONT size=2>COMBS are still unique but they are not random; they always increase and that means there will be far fewer occasions when SQL has to shuffle the pages to insert a record between two others.</FONT></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT size=2><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">BTW, it appears that SQL Server 2005's </SPAN>newsequentialid() <SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">appears to be like a COMB. Unfortunately, it is determined on the data tier, not the client, which means it is no help in off-line scenarios.</SPAN></FONT></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-ansi-: EN-US; mso-fareast-: EN-US; mso-bidi-: AR-SA">&#091;For more on SQL Server 2005's </SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Times New Roman'; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 'Times New Roman'; mso-ansi-: EN-US; mso-fareast-: EN-US; mso-bidi-: AR-SA">newsequentialid()</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-ansi-: EN-US; mso-fareast-: EN-US; mso-bidi-: AR-SA">, see </P><DIV></DIV><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><a href="http://sqljunkies.com/Article/4067A1B1-C31C-4EAF-86C3-80513451FC03.scuk%5d" target="_blank">http://sqljunkies.com/Article/4067A1B1-C31C-4EAF-86C3-80513451FC03.scuk&#093;</A></P><DIV></DIV><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-ansi-: EN-US; mso-fareast-: EN-US; mso-bidi-: AR-SA; mso-bidi-font-family: 'Times New Roman'">Jimmy Nilsson's article</SPAN><SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial; mso-fareast-font-family: 'Times New Roman'; mso-ansi-: EN-US; mso-fareast-: EN-US; mso-bidi-: AR-SA">&nbsp;<a href="http://%28www.in&#102;ormit.com/articles/article.asp?p=25862&amp;seqNum=7&amp;rl=1%29" target="_blank">http://(www.informit.com/articles/article.asp?p=25862&amp;seqNum=7&amp;rl=1) </A></P><DIV></DIV><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">describes tests performed on the data tier that compared GUIDs, COMBs, and Identity+Int. These were tests for:</SPAN></P><UL ="disc"><LI style="MARGIN: 8pt 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Inserts of 500,000 records</SPAN><FONT face="Times New Roman"> </FONT><LI style="MARGIN: 8pt 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Fetches by pk</SPAN><FONT face="Times New Roman"> </FONT><LI style="MARGIN: 8pt 0in 0pt; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-list: l0 level1 lfo1; tab-stops: list .5in" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Joins on the 16-byte Guid/Comb for. key v. the 4 byte integer</SPAN></LI></UL><P style="MARGIN: 0in 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">In sum, the COMBs are very competitive on all three&nbsp;tests - about 1/10th slower than the integer in each test. BTW, the GUID insert was 30x the integer insert - which aligns with the described in the other article above for the 4 million rows. </SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">-----------------</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Here are three ways to calculate COMBS on the client:</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT face="Times New Roman">Here's some C# code to create a COMB, I think. One issue is that while the resolution for a DATETIME in SQL Server is 1/300th of a second, the resolution for a DateTime in .NET is 1/10000th of a second (100 nanoseconds). This means that the sequential part of the COMB will change more frequently than in the SQL Server version, but I'm not sure if this is a good or a bad thing. If it could have a negative impact, it would be a relatively simple matter to use the six bytes corresponding to SQL Server's 1/300th of a second instead of the last six bytes of the .NET DateTime object. <BR><BR></FONT><SPAN style="FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt">public static Guid NewComb() { <BR>byte&#091;&#093; dateBytes = BitConverter.GetBytes(DateTime.Now.Ticks); <BR>byte&#091;&#093; guidBytes = Guid.NewGuid().ToByteArray(); <BR>// copy the last six bytes from the date to the last six bytes of the GUID <BR>Array.Copy(dateBytes, dateBytes.Length - 7, guidBytes, guidBytes.Length - 7, 6); <BR>return new Guid(guidBytes); <BR>} </SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT face="Times New Roman"><SPAN ="subject">C# Code to mirror SQL Server</SPAN><SPAN ="user">By glapointe, </SPAN><SPAN ="time">Aug 16, 2002 08:10 AM</SPAN> </FONT></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT face="Times New Roman">The following code creates a comb that will match exactly (or pretty darn close) the combs created in SQL Server. I also included a little method to retrieve the date from the comb. <BR><BR></FONT><SPAN style="FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 10.0pt">public static Guid NewComb() { <BR>byte&#091;&#093; guidArray = System.Guid.NewGuid().ToByteArray(); <BR><BR>DateTime baseDate = new DateTime(1900,1,1); <BR>DateTime now = DateTime.Now; <BR><BR>// Get the days and milliseconds which will be used to build the byte string <BR>TimeSpan days = new TimeSpan(now.Ticks - baseDate.Ticks); <BR>TimeSpan msecs = new TimeSpan(now.Ticks - (new DateTime(now.Year, now.Month, now.Day).Ticks)); <BR><BR>// Convert to a byte array <BR>// Note that SQL Server is accurate to 1/300th of a millisecond so we divide by 3.333333 <BR>byte&#091;&#093; daysArray = BitConverter.GetBytes(days.Days); <BR>byte&#091;&#093; msecsArray = BitConverter.GetBytes((long)(msecs.TotalMilliseconds/3.333333)); <BR><BR>// Reverse the bytes to match SQL Servers ordering <BR>Array.Reverse(daysArray); <BR>Array.Reverse(msecsArray); <BR><BR>// Copy the bytes into the guid <BR>Array.Copy(daysArray, daysArray.Length - 2, guidArray, guidArray.Length - 6, 2); <BR>Array.Copy(msecsArray, msecsArray.Length - 4, guidArray, guidArray.Length - 4, 4); <BR><BR>return new System.Guid(guidArray); <BR>} <BR><BR>public static DateTime GetDateFromComb(System.Guid guid) { <BR>DateTime baseDate = new DateTime(1900,1,1); <BR>byte&#091;&#093; daysArray = new byte&#091;4&#093;; <BR>byte&#091;&#093; msecsArray = new byte&#091;4&#093;; <BR>byte&#091;&#093; guidArray = guid.ToByteArray(); <BR><BR>// Copy the date parts of the guid to the respective byte arrays. <BR>Array.Copy(guidArray, guidArray.Length - 6, daysArray, 2, 2); <BR>Array.Copy(guidArray, guidArray.Length - 4, msecsArray, 0, 4); <BR><BR>// Reverse the arrays to put them into the appropriate order <BR>Array.Reverse(daysArray); <BR>Array.Reverse(msecsArray); <BR><BR>// Convert the bytes to ints <BR>int days = BitConverter.ToInt32(daysArray, 0); <BR>int msecs = BitConverter.ToInt32(msecsArray, 0); <BR><BR>DateTime date = baseDate.AddDays(days); <BR>date = date.AddMilliseconds(msecs * 3.333333); <BR><BR>return date; <BR>}</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><O:P>&nbsp;</O:P></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Here is one in VB:</SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'">Public</SPAN><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"> <SPAN style="COLOR: blue">Shared</SPAN> <SPAN style="COLOR: blue">Function</SPAN> NewComb() <SPAN style="COLOR: blue">As</SPAN> Guid<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Descr/Purpose: Create a COMB. (A COMBination of an <O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>ordinary GUID and the current datetime.<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>The current datetime should be in <O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN></SPAN><SPAN lang=SV style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'; mso-ansi-: SV">'<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>SQL Server format. </SPAN><SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'">That is days after <O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>1st of Jan 1900 and the no of milliseconds<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>after midnight, divided by 3.3333...<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>It is the lowest six bytes of the GUID<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>that get exchanged for the current datetime.<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Parameters:<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN>-<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Return:<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>A new GUID (COMB)<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Date, who:<SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>2002-04-04, Jimmy Nilsson<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'">&nbsp;<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Revisions:<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'2002-04-07, Jimmy Nilsson<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Changed the solution to use a bytearray instead <O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'of a string.<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'">&nbsp;<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">Dim</SPAN> i <SPAN style="COLOR: blue">As</SPAN> <SPAN style="COLOR: blue">Short<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">Dim</SPAN> theNow <SPAN style="COLOR: blue">As</SPAN> DateTime = System.DateTime.Now<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'">&nbsp;<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Calculate the days after 1st of Jan 1900.<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">Dim</SPAN> theDays <SPAN style="COLOR: blue">As</SPAN> <SPAN style="COLOR: blue">Integer</SPAN> = theNow.Subtract _<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>(<SPAN style="COLOR: blue">New</SPAN> System.DateTime(1900, 1, 1)).Days<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'">&nbsp;<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Calculate the number of milliseconds after<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'midnight, divided by 3.3333...<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">Dim</SPAN> theMilliSeconds <SPAN style="COLOR: blue">As</SPAN> <SPAN style="COLOR: blue">Integer</SPAN> = <SPAN style="COLOR: blue">CType</SPAN>(theNow.Subtract _<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>(System.DateTime.Today).TotalMilliseconds _<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>/ (10 / 3), <SPAN style="COLOR: blue">Integer</SPAN>)<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'">&nbsp;<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Create a new GUID and save it as a bytearray.<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">Dim</SPAN> aBuffer <SPAN style="COLOR: blue">As</SPAN> <SPAN style="COLOR: blue">Byte</SPAN>() = Guid.NewGuid().ToByteArray()<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'">&nbsp;<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Exchange byte 10 and 11 for the current days from <O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'1900-01-01.<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">Dim</SPAN> theDaysAsBytes <SPAN style="COLOR: blue">As</SPAN> <SPAN style="COLOR: blue">Byte</SPAN>() = BitConverter.GetBytes(theDays)<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">For</SPAN> i = 0 <SPAN style="COLOR: blue">To</SPAN> 1<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>aBuffer(10 + i) = theDaysAsBytes(1 - i)<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">Next<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'">&nbsp;<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Exchange byte 12-15 for the no of milliseconds after <O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'midnight. <O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'(Divided by 3.3333...)<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">Dim</SPAN> theMilliSecondsAsBytes <SPAN style="COLOR: blue">As</SPAN> <SPAN style="COLOR: blue">Byte</SPAN>() = _<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>BitConverter.GetBytes(theMilliSeconds)<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">For</SPAN> i = 0 <SPAN style="COLOR: blue">To</SPAN> 3<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN>aBuffer(12 + i) = theMilliSecondsAsBytes(3 - i)<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">Next<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'">&nbsp;<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: green">'Return the bytearray as a new guid.<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">Return</SPAN> <SPAN style="COLOR: blue">New</SPAN> Guid(aBuffer)<O:P></O:P></SPAN></P><P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: n&#111;ne" ="Ms&#111;normal"><SPAN style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"><SPAN style="mso-spacerun: yes">&nbsp;&nbsp;&nbsp; </SPAN><SPAN style="COLOR: blue">End</SPAN> <SPAN style="COLOR: blue">Function<O:P></O:P></SPAN></SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">=========================</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt">Other sources on this topic:</SPAN></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><SPAN style="FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt"><a href="http://www.yafla.com/papers/SQL_Server_Per&#102;ormance/high_per&#102;ormance_sql_server_pt2_1.htm" target="_blank"><FONT face=Arial size=2>http://www.yafla.com/papers/SQL_Server_Performance/high_performance_sql_server_pt2_1.htm</FONT></A></SPAN></P></SPAN></SPAN></FONT></SPAN></B></SPAN><span style="font-size:10px"><br /><br />Edited by DFFadmin - 06-Jun-2007 at 5:43pm</span>]]>
   </description>
   <pubDate>Wed, 06 Jun 2007 12:11:15 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=38&amp;PID=99#99</guid>
  </item> 
  <item>
   <title>GUID Keys and DataBase Performance : Question:  What are the impacts...</title>
   <link>http://www.ideablade.com/forum/forum_posts.asp?TID=38&amp;PID=98#98</link>
   <description>
    <![CDATA[<strong>Author:</strong> <a href="http://www.ideablade.com/forum/member_profile.asp?PF=20" rel="nofollow">Customer</a><br /><strong>Subject:</strong> 38<br /><strong>Posted:</strong> 06-Jun-2007 at 11:48am<br /><br /><P style="MARGIN: 0in 0in 0pt" ="Questi&#111;n"><strong><EM><FONT face="Times New Roman" size=3>Question: </FONT></EM></strong></P><P style="MARGIN: 8pt 0in 0pt" ="Ms&#111;normal"><FONT size=2><FONT face="Times New Roman">What are the impacts of&nbsp;Guid keys on database&nbsp;performance?&nbsp;</FONT></P><DIV><FONT face="Times New Roman"></FONT></DIV><P style="MARGIN: 0in 0in 0pt" ="Questi&#111;n"><a href="http://www.ideablade.com/Forum/IdeaBlade%20DevForce%20Q&amp;A_Attachments/GuidComb.zip" target="_blank"><strong><EM><FONT face="Times New Roman" size=3></FONT></EM></strong></A>&nbsp;</P></FONT><span style="font-size:10px"><br /><br />Edited by IdeaBlade - 06-Jun-2007 at 12:04pm</span>]]>
   </description>
   <pubDate>Wed, 06 Jun 2007 11:48:59 -700</pubDate>
   <guid isPermaLink="true">http://www.ideablade.com/forum/forum_posts.asp?TID=38&amp;PID=98#98</guid>
  </item> 
 </channel>
</rss>