我想从多个数据库表中获取数据,并希望在五个以上的表上使用选择查询,使用事务查询来帮助提高性能:
try {
// First of all, let's begin a transaction
$this->db->beginTransaction();
// Multiple select queries
$this->db->commit();
return $data;
} catch (Exception $e) {
// An exception has been thrown
// We must rollback the transaction
$this->db->rollback();
}
事务可以极大地促进INSERT
/UPDATE
/DELETE
查询(前提是您使用像InnoDB这样的事务引擎),但在仅限于SELECT
的查询上,使用事务不太可能提高性能(但您的应用程序逻辑可能仍然需要它来确保一致性)。
速度差异的主要原因是:若不使用事务,服务器必须尽快将每个更新刷新到磁盘,以确保在服务器崩溃或断电时数据能够存活。对于事务,服务器只需要保证在一个事务中批处理的所有更新都提交到磁盘,或者整个事务都回滚。换句话说,服务器可以自由地将许多写入分组到少数磁盘操作中,并且只需要在绝对确定数据安全时提交事务。性能差异很容易达到一到两个数量级。