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?)
主站蜘蛛池模板: 深圳办公室装修-写字楼装修设计-深圳标榜装饰公司 | 美的商用净水器_美的直饮机_一级代理经销商_Midea租赁价格-厂家反渗透滤芯-直饮水批发品牌售后 | 钢托盘,钢制托盘,立库钢托盘,金属托盘制造商_南京飞天金属制品实业有限公司 | 球盟会·(中国)官方网站| 防火窗_耐火窗_防火门厂家_防火卷帘门-重庆三乐门业有限公司 | 龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司_龙门加工中心-数控龙门加工中心厂家价格-山东海特数控机床有限公司 | 武汉高低温试验箱_恒温恒湿试验箱厂家-武汉蓝锐环境科技有限公司 | 光环国际-新三板公司_股票代码:838504 | 北京网站建设|北京网站开发|北京网站设计|高端做网站公司 | 耐酸泵,耐腐蚀真空泵,耐酸真空泵-淄博华舜耐腐蚀真空泵有限公司 精密模具-双色注塑模具加工-深圳铭洋宇通 | 蚂蚁分类信息系统 - PHP同城分类信息系统 - MayiCMS | 电动高尔夫球车|电动观光车|电动巡逻车|电动越野车厂家-绿友机械集团股份有限公司 | 管理会计网-PCMA初级管理会计,中级管理会计考试网站 | 手机存放柜,超市储物柜,电子储物柜,自动寄存柜,行李寄存柜,自动存包柜,条码存包柜-上海天琪实业有限公司 | 120kv/2mA直流高压发生器-60kv/2mA-30kva/50kv工频耐压试验装置-旭明电工 | 上海质量认证办理中心| 实战IT培训机构_IT培训班选大学生IT技术培训中心_中公优就业 | 佛山市钱丰金属不锈钢蜂窝板定制厂家|不锈钢装饰线条|不锈钢屏风| 电梯装饰板|不锈钢蜂窝板不锈钢工艺板材厂家佛山市钱丰金属制品有限公司 | 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 翰香原枣子坊加盟费多少钱-正宗枣核糕配方培训利润高飘香 | 定制/定做冲锋衣厂家/公司-订做/订制冲锋衣价格/费用-北京圣达信 | Akribis直线电机_直线模组_力矩电机_直线电机平台|雅科贝思Akribis-杭州摩森机电科技有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 今日热点_实时热点_奇闻异事_趣闻趣事_灵异事件 - 奇闻事件 | 深圳律师咨询_深圳律师事务所_华荣【免费在线法律咨询】网 | 茶叶百科网-茶叶知识与茶文化探讨分享平台 | 恒温油槽-恒温水槽-低温恒温槽厂家-宁波科麦仪器有限公司 | 扬子叉车厂家_升降平台_电动搬运车|堆高车-扬子仓储叉车官网 | 深圳市宏康仪器科技有限公司-模拟高空低压试验箱-高温防爆试验箱-温控短路试验箱【官网】 | 牛皮纸|牛卡纸|进口牛皮纸|食品级牛皮纸|牛皮纸厂家-伽立实业 | 小型UV打印机-UV平板打印机-大型uv打印机-UV打印机源头厂家 |松普集团 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 领先的大模型技术与应用公司-中关村科金 | 芝麻黑-芝麻黑石材厂家-永峰石业| 三氯异氰尿酸-二氯-三氯-二氯异氰尿酸钠-优氯净-强氯精-消毒片-济南中北_优氯净厂家 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 解放卡车|出口|济南重汽|报价大全|山东三维商贸有限公司 | 制氮设备-变压吸附制氮设备-制氧设备-杭州聚贤气体设备制造有限公司 | PC阳光板-PC耐力板-阳光板雨棚-耐力板雨棚,厂家定制[优尼科板材] | 流变仪-热分析联用仪-热膨胀仪厂家-耐驰科学仪器商贸 | 酸度计_PH计_特斯拉计-西安云仪|