相关疑难解决方法(0)

使用GUID作为主键的最佳做法是什么,特别是在性能方面?

我有一个应用程序在几乎所有表中使用GUID作为主键,我已经读过使用GUID作为主键时存在性能问题.老实说,我没有看到任何问题,但我即将开始一个新的应用程序,我仍然想使用GUID作为主键,但我想使用复合主键(GUID和可能是另一个字段) .)

我正在使用GUID,因为当您拥有不同的环境(如"生产","测试"和"开发"数据库)以及数据库之间的迁移数据时,它们很好并且易于管理.

我将使用Entity Framework 4.3,我想在将其插入数据库之前在应用程序代码中分配Guid.(即我不想让SQL生成Guid).

创建基于GUID的主键的最佳做法是什么,以避免与此方法相关的假设性能命中?

sql-server database-design entity-framework guid primary-key

311
推荐指数
4
解决办法
15万
查看次数

用于组合数据的实体框架算法

这属于我继承的项目,不能更改表结构或数据访问模型.我被要求优化用于将数据插入数据库的算法.

我们在表T中有一个数据集.从那里,我们拉出一个我们将调用A的集合.我们还查询XML feed并得到一个我们将调用X的集合.

  • 如果X中的值在A中,则必须更新A中的记录以反映X.record的数据
  • 如果X中的值不在A中,则必须将X.record插入到A中
  • 如果A中的值不在X中,则A.record必须保留在A中
  • 必须对所有记录完全迭代X,并且必须更新A.

所有这些更改都需要插回到数据库中.

设置的算法执行以下操作:

Query XML into a LIST
foreach over the XML LIST
    look up foreach.item in A via LINQ (i.e. query = from record in A where
                                                         record.GUID == foreach.item.GUID
                                                         select record)
    if query.Count() == 0
        insert into A (via context.AddToTableName(newTableNameObject)
    else
        var currentRecord = query.First()
        set all properties on currentRecord = properties from foreach.item
        context.SaveChanges()
Run Code Online (Sandbox Code Playgroud)

我知道这不是最理想的.我试图将A放入foreach循环之外的对象(称为queryA),以便将查询移动到内存而不是访问磁盘,但在考虑完之后,我意识到数据库已经在内存中了.

已经将计时器对象添加到算法中,很明显,花费最多时间的是SaveChanges()函数调用.在某些情况下,它是20毫秒,而在其他一些情况下,在可解释的情况下,它会跳到100毫秒.

我宁愿只调用SaveChanges()一次.考虑到我对EF(最好是最薄的)知识的深度以及无法更改表结构并且必须保留不在X中的A的数据的限制,我无法弄清楚如何做到这一点.

建议?

database sql-server linq-to-entities entity-framework

6
推荐指数
1
解决办法
5082
查看次数

我可以依赖.Net中的GUID多少钱?

我可以依赖.Net中的GUID多少钱?我的SA告诉了我

我们将GUID用作所有表中的主键.

我想知道GUID作为主键的可靠性.

可能会有重复的机会吗?

我们真的应该用这种方式吗?

表现怎么样?

任何建议对我都有帮助.

c# sql guid primary-key

6
推荐指数
2
解决办法
370
查看次数

将非顺序ID作为数据库中表的主键是否可以?

我不太了解数据库找到正确的词来提出这个问题,所以让我举一个例子来解释我正在尝试做的事情:假设我希望表的主键是我从中获取的ID API,但大多数API请求都会导致404错误.结果,我的表​​格看起来像这样:

我也不知道如何在Stack Overflow上格式化类似于表的结构,所以这将是一个粗略的视觉:

API_ID_PK | name
------------------
1         | Billy
5         | Timmy
23        | Richard
54        | Jobert
104       | Broccoli
Run Code Online (Sandbox Code Playgroud)

是否可以将ID按顺序分隔1位数?或者我应该这样做:

ID PK |  API_ID   | NAME
----------------------------------------
1     |    1      | Billy
2     |    5      | Timmy
3     |    23     | Richard
4     |    54     | Jobert
5     |    104    | Broccoli
Run Code Online (Sandbox Code Playgroud)

第二个表是否会因索引原因而更有效率?或者第一张表完美无缺?谢谢!

mysql sql database indexing id

5
推荐指数
1
解决办法
1455
查看次数

SQL Server中唯一标识符ID列上的群集主键

如果表上的ID列是唯一标识符(Guid),那么在ID列上创建聚簇主键是否有任何意义?

鉴于它们是全球唯一的,排序将如何运作?

sql-server primary-key uniqueidentifier

3
推荐指数
2
解决办法
5193
查看次数

SQL Server关闭ANSI_WARNING ON存储过程

我需要知道如何在我的存储过程中关闭ANSI警告.我一直在收到错误

字符串或二进制数据将被截断.

但是,我希望关闭它,以便我期待这一点,而宁愿允许它.

我补充说

SET ANSI_WARNINGS OFF 
GO
Run Code Online (Sandbox Code Playgroud)

然而,在存储过程之前,执行此操作似乎根本不会抑制错误.

由于我开始使用此截断错误的原因,我的一个存储过程执行动态Sql以检索值(SQLFIddle显示代码).我必须将所有字段的长度设置为最大长度(NVarchar(3072)).然而,当执行我的查询时,我需要将它们打印到正确的大小,然后将它们打印到客户端.

非常感谢如何最好地处理这个问题.提前致谢.

sql t-sql sql-server

1
推荐指数
1
解决办法
1万
查看次数