2017-07-08 132 views
1

哪个更快?同一事务中的多个更新查询或单个查询?这是更快的MySQL?同一事务中的多个更新查询或单个查询?

例如,在这种情况下哪个更快?

UPDATE product p, productPrice pp 
SET 
p.name = newName, 
pp.price = pp.price * 0.8 
WHERE 
p.productId = pp.productId 
AND 
p.productId = 1; 

或者这样:

Update product set p.name = newName where productId = 1; 
Update productPrice set price = price * 0.8 where productId = 1; 

写在

a single transaction 

如果一个加以考虑?

与他们的在mysql中的任何区别?

而且

选择查询更新查询情况之间有什么区别?

谢谢!

回答

0

第一个更快,因为要更新的记录只需定位一次。另外,事务不会使数据库操作更快,只是确保它们全部执行或不执行,以防发生故障。

锁在这里没有意义,同样适用于选择或更新语句。

0

每个查询都会产生MySQL花费的开销。分配和释放内存和资源,规划执行等。

因此,虽然您的查询将“做”相同的事情,即找到并更新第一个表中的一行,然后找到并更新第二个表中的某些行,您将有更多的开销。

开销通常只需要几毫秒。但对于像“”这样的查询使用索引更新一行(通常只需要几毫秒),开销通常负责接近查询的完整执行时间,因为“动作”本身(查找行和写新的价值)是令人难以置信的快速。

因此,即使未在开销的每一个部分将被要求如果两次你分手了你的查询(例如“检查的权限,如果你被允许更新的第一个表”只会在两种情况下需要一次),你的第二个场景可能需要大约两倍于第一个查询的时间,因为这里需要相对较多的时间。

您应该经常检查结合查询是否实际上节省了时间(例如通过查看执行计划或者只是测量它,例如连续执行20次以获得可测量的时间)。有时MySQL会执行不同于你预期的查询。如果你过分的话,你的代码可能会变得不太可读。

对于任何类型的查询,情况基本上是相同的,例如, select

由于开销可能非常相关,因此MySQL在某些情况下有一个功能可以摆脱它。如果您多次执行相同的查询(例如,通过更换产品ID和价格因素,可以使用您的update用于多种产品),您可以使用prepared statements(例如,从php。这允许MySQL只做一次这样的开销(例如,计划如何执行你的查询),以下基本相同的查询可以重用这个。

这与交易虽然并无太大关系(尽管如果您有不同的交易首先更新价格,然后尝试更新产品,这可能会影响执行,但您的第二种方案会增加死锁的机会因为你不得不重复交易)。

0

哪个更快?同一事务中的多个更新查询或单个查询?

一些大的查询比许多小的查询快。这取决于表格的大小以及要更新的数据的大小。一次执行多个更新会更快,但也会导致开销。

是否应该考虑锁定?

是,检查this知道通过SQL语句设置MySQL的锁。