pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

使用 INT 或 GUID 作為主鍵

Using INT or GUID as primary key(使用 INT 或 GUID 作為主鍵)
本文介紹了使用 INT 或 GUID 作為主鍵的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!

問(wèn)題描述

限時(shí)送ChatGPT賬號(hào)..

我試圖在 SQL Server VB.net 中創(chuàng)建一個(gè) ID 列,該列將為數(shù)據(jù)庫(kù)中創(chuàng)建的每個(gè)新行提供一個(gè)數(shù)字序列.所以我使用以下技術(shù)來(lái)創(chuàng)建 ID 列.

I was trying to create an ID column in SQL server, VB.net that would provide a sequence of numbers for every new row created in a database. So I used the following technique to create the ID column.

select * from T_Users
ALTER TABLE T_Users     
ADD User_ID INT NOT NULL IDENTITY(1,1) Primary Key

然后我在數(shù)據(jù)庫(kù)中注冊(cè)了幾個(gè)用戶名,它工作得很好.例如,前六行是 1、2、3、4、5、6.然后我第二天又注冊(cè)了4個(gè)用戶,但是這次ID號(hào)從6個(gè)跳到了一個(gè)非常大的數(shù)字,例如:1、2、3、4、5、6、1002、1003、1004、1005.然后兩天后,我又注冊(cè)了兩個(gè)用戶,新行顯示為 3002,3004.所以我的問(wèn)題是為什么每隔一天我注冊(cè)用戶就會(huì)跳過(guò)這么大的數(shù)字.我用來(lái)創(chuàng)建序列的技術(shù)是錯(cuò)誤的嗎?如果它是錯(cuò)的,任何人都可以告訴我如何做對(duì)嗎?現(xiàn)在,當(dāng)我對(duì)上面使用的技術(shù)感到沮喪時(shí),我嘗試使用順序生成的 GUID 值.GUID 值的序列生成得很好.但是,唯一的缺點(diǎn)是,它會(huì)生成很長(zhǎng)的數(shù)字(INT 大小的 4 倍).我的問(wèn)題是使用 GUID 是否比 INT 有任何顯著優(yōu)勢(shì)?

Then I registered few usernames into the database and it worked just fine. For example the first six rows would be 1,2,3,4,5,6. Then I registered 4 more users the NEXT day, but this time the ID numbers jumped from 6 to A very large number such as: 1,2,3,4,5,6,1002,1003,1004,1005. Then two days later, I registered two more users and the new rows read 3002,3004. So my question is why is it skipping such a large number every other day I register users. Is the technique I used to create the sequence wrong? If it is wrong can anyone please tell me how to do it right? Now as I was getting frustrated with the technique used above, alternatively I tried to use sequentially generated GUID values. The sequence of GUID values were generated fine. However, the only downside is, it generates a very long numbers (4 times the INT size). My question here is does using GUID have any significant advantage over INT?

問(wèn)候,

推薦答案

GUID 的好處:

如果您希望離線客戶端能夠創(chuàng)建新記錄,GUID 非常有用,因?yàn)楫?dāng)新記錄同步回主數(shù)據(jù)庫(kù)時(shí),您永遠(yuǎn)不會(huì)遇到主鍵沖突.

GUIDs are good if you ever want offline clients to be able to create new records, as you will never get a primary key clash when the new records are synchronised back to the main database.

GUID 的缺點(diǎn):

GUIDS 作為主鍵會(huì)對(duì)數(shù)據(jù)庫(kù)的性能產(chǎn)生影響,因?yàn)閷?duì)于集群主鍵,數(shù)據(jù)庫(kù)希望按鍵值的順序保留行.但這意味著在現(xiàn)有記錄之間進(jìn)行大量插入,因?yàn)?GUID 將是隨機(jī)的.

GUIDS as primary keys can have an effect on the performance of the DB, because for a clustered primary key, the DB will want to keep the rows in order of the key values. But this means a lot of inserts between existing records, because the GUIDs will be random.

使用 IDENTITY 列不會(huì)受此影響,因?yàn)楸WC下一條記錄具有最高值,因此每次都將行添加到末尾.無(wú)需重新洗牌.

Using IDENTITY column doesn't suffer from this because the next record is guaranteed to have the highest value and so the row is just tacked on the end every time. No re-shuffle needs to happen.

有一個(gè)折衷方案是生成一個(gè)偽 GUID,這意味著您預(yù)計(jì)每 70 年左右就會(huì)發(fā)生一次密鑰沖突,但對(duì)索引編制有很大幫助.

There is a compromise which is to generate a pseudo-GUID which means you would expect a key clash every 70 years or so, but helps the indexing immensely.

其他缺點(diǎn)是 a) 它們確實(shí)占用了更多的存儲(chǔ)空間,并且 b) 編寫 SQL 確實(shí)很痛苦,即更容易鍵入 UPDATE TABLE SET FIELD = 'value' where KEY = 50003UPDATE TABLE SET FIELD = 'value' where KEY = '{F820094C-A2A2-49cb-BDA7-549543BB4B2C}'

The other downsides are that a) they do take up more storage space, and b) are a real pain to write SQL against, i.e. much easier to type UPDATE TABLE SET FIELD = 'value' where KEY = 50003 than UPDATE TABLE SET FIELD = 'value' where KEY = '{F820094C-A2A2-49cb-BDA7-549543BB4B2C}'

您對(duì) IDENTITY 列的聲明在我看來(lái)很好.鍵值中的差距可能是由于嘗試添加行失敗所致.IDENTITY 值將增加,但該行永遠(yuǎn)不會(huì)被提交.不要讓它打擾你,它幾乎發(fā)生在每張桌子上.

Your declaration of the IDENTITY column looks fine to me. The gaps in your key values are probably due to failed attempts to add a row. The IDENTITY value will be incremented but the row never gets committed. Don't let it bother you, it happens in practically every table.

這個(gè)問(wèn)題涵蓋了我所說(shuō)的偽 GUID 的含義.在聚集索引上使用順序 GUID 鍵的 INSERT 不顯著更快

This question covers what I was meaning by pseudo-GUID. INSERTs with sequential GUID key on clustered index not significantly faster

在 SQL Server 2005+ 中,您可以使用 NEWSEQUENTIALID() 獲得一個(gè)隨機(jī)值,該值應(yīng)該大于以前的值.請(qǐng)參閱此處了解更多信息 http://technet.microsoft.com/en-us/library/ms189786%28v=sql.90%29.aspx

In SQL Server 2005+ you can use NEWSEQUENTIALID() to get a random value that is supposed to be greater than the previous ones. See here for more info http://technet.microsoft.com/en-us/library/ms189786%28v=sql.90%29.aspx

這篇關(guān)于使用 INT 或 GUID 作為主鍵的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,也希望大家多多支持html5模板網(wǎng)!

【網(wǎng)站聲明】本站部分內(nèi)容來(lái)源于互聯(lián)網(wǎng),旨在幫助大家更快的解決問(wèn)題,如果有圖片或者內(nèi)容侵犯了您的權(quán)益,請(qǐng)聯(lián)系我們刪除處理,感謝您的支持!

相關(guān)文檔推薦

What SQL Server Datatype Should I Use To Store A Byte[](我應(yīng)該使用什么 SQL Server 數(shù)據(jù)類型來(lái)存儲(chǔ)字節(jié) [])
Interpreting type codes in sys.objects in SQL Server(解釋 SQL Server 中 sys.objects 中的類型代碼)
Typeorm .loadRelationCountAndMap returns zeros(Typeorm .loadRelationCountAndMap 返回零)
MS SQL: Should ISDATE() Return quot;1quot; when Cannot Cast as Date?(MS SQL:ISDATE() 是否應(yīng)該返回“1?什么時(shí)候不能投射為日期?)
Converting the name of a day to its integer representation(將一天的名稱轉(zhuǎn)換為其整數(shù)表示)
How to convert nvarchar m/d/yy to mm/dd/yyyy in SQL Server?(如何在 SQL Server 中將 nvarchar m/d/yy 轉(zhuǎn)換為 mm/dd/yyyy?)
主站蜘蛛池模板: 暖气片十大品牌厂家_铜铝复合暖气片厂家_暖气片什么牌子好_欣鑫达散热器 | 福建省教师资格证-福建教师资格证考试网 | 依维柯自动挡房车,自行式国产改装房车,小型房车价格,中国十大房车品牌_南京拓锐斯特房车 - 南京拓锐斯特房车 | 汽液过滤网厂家_安平县银锐丝网有限公司 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 杭州火蝠电商_京东代运营_拼多多全托管代运营【天猫代运营】 | 高铝矾土熟料_细粉_骨料_消失模_铸造用铝矾土_铝酸钙粉—嵩峰厂家 | 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 瓶盖扭矩测试仪-瓶盖扭力仪-全自动扭矩仪-济南三泉中石单品站 | 全国国际化学校_国际高中招生_一站式升学择校服务-国际学校网 | 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 | 幂简集成 - 品种超全的API接口平台, 一站搜索、试用、集成国内外API接口 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 桁架机器人_桁架机械手_上下料机械手_数控车床机械手-苏州清智科技装备制造有限公司 | 耐酸碱胶管_耐腐蚀软管总成_化学品输送软管_漯河利通液压科技耐油耐磨喷砂软管|耐腐蚀化学软管 | 立式矫直机_卧式矫直机-无锡金矫机械制造有限公司 | 真空乳化机-灌装封尾机-首页-温州精灌| POS机办理_个人pos机免费领取-银联pos机申请首页 | 风淋室生产厂家报价_传递窗|送风口|臭氧机|FFU-山东盛之源净化设备 | 聚合氯化铝价格_聚合氯化铝厂家_pac絮凝剂-唐达净水官网 | 山东聚盛新型材料有限公司-纳米防腐隔热彩铝板和纳米防腐隔热板以及钛锡板、PVDF氟膜板供应商 | 不锈钢拉手厂家|浴室门拉手厂家|江门市蓬江区金志翔五金制品有限公司 | 电动不锈钢套筒阀-球面偏置气动钟阀-三通换向阀止回阀-永嘉鸿宇阀门有限公司 | 锂离子电池厂家-山东中信迪生电源 | 知网论文检测系统入口_论文查重免费查重_中国知网论文查询_学术不端检测系统 | 回收二手冲床_金丰旧冲床回收_协易冲床回收 - 大鑫机械设备 | 旋振筛_不锈钢旋振筛_气旋筛_旋振筛厂家—新乡市大汉振动机械有限公司 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 胶原检测试剂盒,弹性蛋白检测试剂盒,类克ELISA试剂盒,阿达木单抗ELISA试剂盒-北京群晓科苑生物技术有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 北京银联移动POS机办理_收银POS机_智能pos机_刷卡机_收银系统_个人POS机-谷骐科技【官网】 | 三氯异氰尿酸-二氯-三氯-二氯异氰尿酸钠-优氯净-强氯精-消毒片-济南中北_优氯净厂家 | 拖鞋定制厂家-品牌拖鞋代加工厂-振扬实业中国高端拖鞋大型制造商 | 辊道窑炉,辊道窑炉厂家-山东艾希尔| 成都软件开发_OA|ERP|CRM|管理系统定制开发_成都码邻蜀科技 | 沙盘模型公司_沙盘模型制作公司_建筑模型公司_工业机械模型制作厂家 | 双相钢_双相不锈钢_双相钢圆钢棒_双相不锈钢报价「海新双相钢」 双能x射线骨密度检测仪_dxa骨密度仪_双能x线骨密度仪_品牌厂家【品源医疗】 | 油冷式_微型_TDY电动滚筒_外装_外置式电动滚筒厂家-淄博秉泓机械有限公司 | 芜湖厨房设备_芜湖商用厨具_芜湖厨具设备-芜湖鑫环厨具有限公司 控显科技 - 工控一体机、工业显示器、工业平板电脑源头厂家 | 蒸压釜_蒸养釜_蒸压釜厂家-山东鑫泰鑫智能装备有限公司 | 撕碎机,撕破机,双轴破碎机-大件垃圾破碎机厂家 |