几乎同时创建和删除数据库记录查询,哪个更快或更优先?
near-simoultaneous create and delete database record query, which is faster or has higher priority?
假设我有一个多线程网络服务来查找旧的身份记录,以便基于它创建一个新的身份记录,并删除旧的(如果它首先存在)使用 2 Public 方法:
- 创建身份
- 删除身份[=10=]
应该避免这种情况,因为我们都可以想到由此产生的问题,我想知道如果我发送创建然后立即删除会发生什么?
我想具体了解的事情:
- 2 个中的 1 个是否具有更高的优先级,以便例如所有创建必须先于 table 上的删除?
- 当我们排除优先级时,删除操作总是比创建操作快吗?
SQL 服务器将按照收到命令的顺序执行命令。您应该将它们包装在一个事务中。如果创建成功但删除失败怎么办,反之亦然?您可以创建一个存储过程来确保操作以特定顺序发生,并且拥有一个事务将确保如果一个操作失败,比如连接丢失,另一个操作将被回滚。
我不知道你对多线程有多熟悉,所以我不确定这个答案的目标水平。您的问题的简单答案是;
- 哪个更快 - 可以是
- 哪个优先级更高 - 两者都不是
SQL 服务器管理并发性,因此您无需担心能够 尝试同时执行这两个操作。如果同一对象上的两个操作同时发生,锁管理器将处理任何冲突。
至于为什么其中一个可以更快,我确信一个操作在理论上可能比另一个更快,但实际上更快可能意味着 'finishes first',在这种情况下,现实世界中的延迟如等待、阻塞日程安排会有所作为。
SQL 服务器没有设置命令优先级的工具,即使它做到了以上几点仍然适用。
如果您需要在删除之前创建,那么您必须自己管理。对存储过程的单个调用是理想的,但如果您必须使用 2 个调用,则必须等待第一个调用 return,然后再进行第二个调用。如果您需要两个操作都是原子的,那么您将不得不使用事务。
假设我有一个多线程网络服务来查找旧的身份记录,以便基于它创建一个新的身份记录,并删除旧的(如果它首先存在)使用 2 Public 方法: - 创建身份 - 删除身份[=10=]
应该避免这种情况,因为我们都可以想到由此产生的问题,我想知道如果我发送创建然后立即删除会发生什么?
我想具体了解的事情: - 2 个中的 1 个是否具有更高的优先级,以便例如所有创建必须先于 table 上的删除? - 当我们排除优先级时,删除操作总是比创建操作快吗?
SQL 服务器将按照收到命令的顺序执行命令。您应该将它们包装在一个事务中。如果创建成功但删除失败怎么办,反之亦然?您可以创建一个存储过程来确保操作以特定顺序发生,并且拥有一个事务将确保如果一个操作失败,比如连接丢失,另一个操作将被回滚。
我不知道你对多线程有多熟悉,所以我不确定这个答案的目标水平。您的问题的简单答案是;
- 哪个更快 - 可以是
- 哪个优先级更高 - 两者都不是
SQL 服务器管理并发性,因此您无需担心能够 尝试同时执行这两个操作。如果同一对象上的两个操作同时发生,锁管理器将处理任何冲突。
至于为什么其中一个可以更快,我确信一个操作在理论上可能比另一个更快,但实际上更快可能意味着 'finishes first',在这种情况下,现实世界中的延迟如等待、阻塞日程安排会有所作为。
SQL 服务器没有设置命令优先级的工具,即使它做到了以上几点仍然适用。
如果您需要在删除之前创建,那么您必须自己管理。对存储过程的单个调用是理想的,但如果您必须使用 2 个调用,则必须等待第一个调用 return,然后再进行第二个调用。如果您需要两个操作都是原子的,那么您将不得不使用事务。