版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、据库中使用自增量字段与Guid字段主键的性能对比1.概述:在我们的数据库设计中,数据库的主键是必不可少的,主键的设计对整个数据库的设计影响很大.我就对自动增量字段与Guid字段的性能作一下对比,欢迎大家讨论. 2.简介: 1.自增量字段自增量字段每次都会按顺序递增,可以保证在一个表里的主键不重复。除非超出了自增字段类型的最大值并从头递增,但这几乎不可能。使用自增量字段来做主键是非常简单的,一般只需在建表时声明自增属性即可。自增量的值都是需要在系统中维护一个全局的数据值,每次插入数据时即对此次值进行增量取值。当在当量产生唯一标识的并发环境中,每次的增量取值都必须最此全局值加锁解锁以保证增量的唯一
2、性。这可能是一个并发的瓶颈,会牵扯一些性能问题。 在数据库迁移或者导入数据的时候自增量字段有可能会出现重复,这无疑是一场恶梦(本人已经深受其害. 如果要搞分布式数据库的话,这自增量字段就有问题了。因为,在分布式数据库中,不同数据库的同名的表可能需要进行同步复制。一个数据库表的自增量值,就很可能与另一数据库相同表的自增量值重复了。2.uniqueidentifier(Guid字段 在MS Sql 数据库中可以在建立表结构是指定字段类型为uniqueidentifier,并且其默认值可以使用NewID(来生成唯一的Guid(全局唯一标识符.使用NewID生成的比较随机,如果是SQL 2005可以使
3、用NewSequentialid(来顺序生成,在此为了兼顾使用SQL 2000使用了NewID(.Guid:指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的,其算法是通过以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字生成。其格式为:04755396-9A29-4B8C-A38D-00042C1B9028. Guid的优点就是生成的id比较唯一,不管是导出数据还是做分步开发都不会出现问题.然而它生成的id比较长,占用的数据库空间也比较多,随着外存价格的下降,这个也无需考虑.另外Guid不便于记忆,在这方面不如自动增量字段,在作调试程序的时候不太方便。3.测试:1.测试环境
4、操作系统:windows server 2003 R2 Enterprise Edition Service Pack 2数据库:MS SQL 2005 CPU:Intel(R Pentium(R 4 CPU 3.40GHz内存:DDR 667 1G硬盘:WD 80G2.数据库脚本-自增量字段表CREATE TABLE dbo.Table_Id(Id int IDENTITY(1,1 NOT NULL,Value varchar(50 COLLATE Chinese_PRC_CI_AS NULL,CONSTRAINT PK_Table_Id PRIMARY KEY CLUSTERED (Id
5、ASCWITH (IGNORE_DUP_KEY = OFF ON PRIMARYON PRIMARYGO-Guid字段表CREATE TABLE dbo.Table_Guid(Guid uniqueidentifier NOT NULL CONSTRAINT DF_Table_Guid_Guid DEFAULT (newid(,Value varchar(50 COLLATE Chinese_PRC_CI_AS NULL,CONSTRAINT PK_Table_Guid PRIMARY KEY CLUSTERED (Guid ASCWITH (IGNORE_DUP_KEY = OFF ON P
6、RIMARYON PRIMARYGO 测试代码1using System;2using System.Collections.Generic;3using System.Text;4using System.Data.SqlClient;5using System.Diagnostics;6using System.Data;78namespace GuidTest910 class Program11 12 string Connnection = "server=.;database=GuidTest;Integrated Security=true;"13 stati
7、c void Main(string args14 15 Program app = new Program(;16 int Count = 10000;17 Console.WriteLine("数据记录数为0",Count;18 /自动id增长测试;19 Stopwatch WatchId = new Stopwatch(;20 Console.WriteLine("自动增长id测试"21 Console.WriteLine("开始测试"22 WatchId.Start(;23 Console.WriteLine("测试
8、中"2425 app.Id_InsertTest(Count;26 /app.Id_ReadToTable(Count;27 /app.Id_Count(;2829 /查询第300000条记录;30 /app.Id_SelectById(;3132 WatchId.Stop(;33 Console.WriteLine("时间为0毫秒",WatchId.ElapsedMilliseconds;34 Console.WriteLine("测试结束"3536 Console.WriteLine("-"37 /Guid测试;38 C
9、onsole.WriteLine("Guid测试"39 Stopwatch WatchGuid = new Stopwatch(;40 Console.WriteLine("开始测试"41 WatchGuid.Start(;42 Console.WriteLine("测试中"4344 app.Guid_InsertTest(Count;45 /app.Guid_ReadToTable(Count;46 /app.Guid_Count(;4748 /查询第300000条记录;49 /app.Guid_SelectById(;5051 W
10、atchGuid.Stop(;52 Console.WriteLine("时间为0毫秒", WatchGuid.ElapsedMilliseconds;53 Console.WriteLine("测试结束"54 Console.Read(;55 5657 /*/ 58 / 自动增长id测试59 / 60 private void Id_InsertTest(int count61 62 string InsertSql="insert into Table_Id (Value values (0"63 using (SqlConnec
11、tion conn = new SqlConnection(Connnection64 65 conn.Open(;66 SqlCommand com = new SqlCommand(;67 for (int i = 0; i < count; i+68 69 com.Connection = conn;70 com.CommandText = string.Format(InsertSql, i;71 com.ExecuteNonQuery(;72 73 74 7576 /*/ 77 / 将数据读到Table78 / 79 private void Id_ReadToTable(in
12、t count80 81 string ReadSql = "select top " + count.ToString( + " * from Table_Id"82 using (SqlConnection conn = new SqlConnection(Connnection83 84 SqlCommand com = new SqlCommand(ReadSql, conn;85 SqlDataAdapter adapter = new SqlDataAdapter(com;86 DataSet ds = new DataSet(;87 ada
13、pter.Fill(ds;88 Console.WriteLine("数据记录数为:0", ds.Tables0.Rows.Count;89 90 9192 /*/ 93 / 数据记录行数测试94 / 95 private void Id_Count(96 97 string ReadSql = "select Count(* from Table_Id"98 using (SqlConnection conn = new SqlConnection(Connnection99 100 SqlCommand com = new SqlCommand(Re
14、adSql, conn;101 conn.Open(;102 object CountResult = com.ExecuteScalar(;103 conn.Close(;104 Console.WriteLine("数据记录数为:0",CountResult;105 106 107108 /*/ 109 / 根据id查询;110 / 111 private void Id_SelectById(112 113 string ReadSql = "select * from Table_Id where Id="+300000;114 using (S
15、qlConnection conn = new SqlConnection(Connnection115 116 SqlCommand com = new SqlCommand(ReadSql, conn;117 conn.Open(;118 object IdResult = com.ExecuteScalar(;119 Console.WriteLine("Id为0", IdResult;120 conn.Close(;121 122 123 124 /*/ 125 / Guid测试;126 / 127 private void Guid_InsertTest(int
16、count128 129 string InsertSql = "insert into Table_Guid (Value values (0"130 using (SqlConnection conn = new SqlConnection(Connnection131 132 conn.Open(;133 SqlCommand com = new SqlCommand(;134 for (int i = 0; i < count; i+135 136 com.Connection = conn;137 com.CommandText = string.Forma
17、t(InsertSql, i;138 com.ExecuteNonQuery(;139 140 141 142143 /*/ 144 / Guid格式将数据库读到Table145 / 146 private void Guid_ReadToTable(int count147 148 string ReadSql = "select top "+count.ToString(+" * from Table_GuID"149 using (SqlConnection conn = new SqlConnection(Connnection150 151 S
18、qlCommand com = new SqlCommand(ReadSql, conn;152 SqlDataAdapter adapter = new SqlDataAdapter(com;153 DataSet ds = new DataSet(;154 adapter.Fill(ds;155 Console.WriteLine("数据记录为:0", ds.Tables0.Rows.Count;156 157 158159 /*/ 160 / 数据记录行数测试161 / 162 private void Guid_Count(163 164 string ReadSql = "select Count(* from Table_Guid"165 using (SqlConnection conn = new SqlConnection(Connnection166 167 SqlCommand com
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年电气控制系统设计中的数字化转型
- 2026年桥梁健康监测的性价比分析
- 餐饮企业供应链管理及风险控制
- 2026年土木工程中的有限元分析
- 2026年桥梁耐久性工程师的职业发展
- 市政建设工程环境影响评估报告
- 2026年建筑内部电气线路的防火设计
- (2025年)湖南选调生考试真题及答案
- 互联网技术岗位技能培训方案
- 针灸推拿科知识培训课件
- 幼儿园STEAM教育评价体系-洞察与解读
- 山东建筑大学土木工程材料期末考试复习题及参考答案
- 排风工程安装方案(3篇)
- 粮食存储与安全知识培训课件
- 乳制品配送服务质量保障措施
- 秋天公开课教学课件
- 保密文件流转管理办法
- 《老年人生活照料与基础护理实务》智慧健康养老服务与管理专业全套教学课件
- 呼吸睡眠暂停综合征科普
- 城投财务考试试题及答案
- 福建省机动车维修行业工时定额和维修费计算方法文档资料
评论
0/150
提交评论