Omu*_*Omu 13 c# entity guid long-integer
我在asp.net mvc上做一个web应用程序,我在我的实体的long和Guid数据类型之间做出选择,但我不知道哪个更好.有人说长得多快.Guid也可能有一些优势.有人知道吗?
Dav*_*kle 18
当GUID可能不合适时
GUID几乎总是会变慢,因为它们更大.这使您的索引更大.这会让你的桌子更大.这意味着,如果您必须全部或部分扫描您的表,则需要更长时间,您将看到性能降低.这是基于报告的系统中的一个巨大问题.例如,永远不会将GUID用作事实表中的外键,因为它的长度通常很大,因为事实表通常会被部分扫描以生成聚合.
还要考虑使用"长"是否合适.这是一个非常大的数字.如果您认为在某些时候表中可能有超过2个BILLION条目,则只需要它.我很少使用它们.
GUID也很难使用和调试.说,"客户记录10034存在问题,弗兰克,去检查一下"比说"{2f1e4fc0-81fd-11da-9156-00036a0f876a}有问题要容易得多......"Ints和longs也比较容易在需要时输入查询.
哦,并非你永远不会获得相同的GUID两次.众所周知,它发生在非常大的,断开连接的系统上,所以这是需要考虑的事情,尽管我不会在大多数应用程序中进行设计.
当GUID可以是合适的
当您使用已创建实体然后同步的断开连接的系统时,GUID 是合适的.例如,如果某人在您的数据库中在移动设备上创建记录并同步它,或者您在不同的分支机构创建了实体并在晚上同步到中央商店.这就是他们给你的灵活性.
在某些ORM方案中,GUID还允许您在不将数据库持久化的情况下关联实体.Linq to SQL(我相信EF)没有这个问题,尽管有时您可能会被迫将更改提交到数据库以获取密钥.
如果在客户端上创建GUID,则由于您创建的GUID不是顺序的,因此可能会因为数据库上的页面拆分而导致插入性能受损.
我的建议
这里要考虑很多东西.我的投票是不使用它们,除非你有一个令人信服的用例.如果性能确实是您的目标,请保持您的桌面小.保持你的领域小.保持您的数据库索引小而有选择性.
归档时间: |
|
查看次数: |
5599 次 |
最近记录: |