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?)
主站蜘蛛池模板: 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 广东风淋室_广东风淋室厂家_广东风淋室价格_广州开源_传递窗_FFU-广州开源净化科技有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | 温州富欧金属封头-不锈钢封头厂家| 螺钉式热电偶_便携式温度传感器_压簧式热电偶|无锡联泰仪表有限公司|首页 | 细砂提取机,隔膜板框泥浆污泥压滤机,螺旋洗砂机设备,轮式洗砂机械,机制砂,圆锥颚式反击式破碎机,振动筛,滚筒筛,喂料机- 上海重睿环保设备有限公司 | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | 蔡司三坐标-影像测量机-3D扫描仪-蔡司显微镜-扫描电镜-工业CT-ZEISS授权代理商三本工业测量 | 暴风影音 | 冷轧机|两肋冷轧机|扁钢冷轧机|倒立式拉丝机|钢筋拔丝机|收线机-巩义市华瑞重工机械制造有限公司 | 混合生育酚_醋酸生育酚粉_琥珀酸生育酚-山东新元素生物科技 | 聚天冬氨酸,亚氨基二琥珀酸四钠,PASP,IDS - 远联化工 | 烟台条码打印机_烟台条码扫描器_烟台碳带_烟台数据采集终端_烟台斑马打印机-金鹏电子-金鹏电子 | 专业的压球机生产线及解决方案厂家-河南腾达机械厂 | 切铝机-数控切割机-型材切割机-铝型材切割机-【昆山邓氏精密机械有限公司】 | 名律网-法律问题咨询-找律师-法律知识| 工业硝酸钠,硝酸钠厂家-淄博「文海工贸」 | 卫生人才网-中国专业的医疗卫生医学人才网招聘网站! | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 箱式破碎机_移动方箱式破碎机/价格/厂家_【华盛铭重工】 | 强效碱性清洗剂-实验室中性清洗剂-食品级高纯氮气发生器-上海润榕科学器材有限公司 | 海尔生物医疗四川代理商,海尔低温冰箱四川销售-成都壹科医疗器械有限公司 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 九爱图纸|机械CAD图纸下载交流中心| 光伏家 - 太阳能光伏发电_分布式光伏发电_太阳能光伏网 | 电动手术床,医用护理床,led手术无影灯-曲阜明辉医疗设备有限公司 | PSI渗透压仪,TPS酸度计,美国CHAI PCR仪,渗透压仪厂家_价格,微生物快速检测仪-华泰和合(北京)商贸有限公司 | 深圳网站建设-高端企业网站开发-定制网页设计制作公司 | 光泽度计_测量显微镜_苏州压力仪_苏州扭力板手维修-苏州日升精密仪器有限公司 | 电采暖锅炉_超低温空气源热泵_空气源热水器-鑫鲁禹电锅炉空气能热泵厂家 | 并离网逆变器_高频UPS电源定制_户用储能光伏逆变器厂家-深圳市索克新能源 | 防爆电机生产厂家,YBK3电动机,YBX3系列防爆电机,YBX4节防爆电机--河南省南洋防爆电机有限公司 | 煤机配件厂家_刮板机配件_链轮轴组_河南双志机械设备有限公司 | 空气弹簧|橡胶气囊|橡胶空气弹簧-上海松夏减震器有限公司 | 红立方品牌应急包/急救包加盟,小成本好项目代理_应急/消防/户外用品加盟_应急好项目加盟_新奇特项目招商 - 中红方宁(北京) 供应链有限公司 | ICP备案查询_APP备案查询_小程序备案查询 - 备案巴巴 | 冷水机,风冷冷水机,水冷冷水机,螺杆冷水机专业制造商-上海祝松机械有限公司 | 石英陶瓷,石英坩埚,二氧化硅陶瓷-淄博百特高新材料有限公司 | 高压负荷开关-苏州雷尔沃电器有限公司| 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 |