Pregunta

En Firebird 2.0, ¿está usando una transacción explícita más rápido en un comando SELECT que ejecutar el comando con una implícita?

¿Fue útil?

Solución

Todos los comandos SQL (SELECCIONAR, INSERTAR, ACTUALIZAR, etc.) pueden ejecutarse SOLAMENTE dentro de alguna transacción. No puede ejecutar un comando sin que se inicie una transacción anterior.

Otros consejos

Las transacciones explícitas e implícitas son una característica del conjunto de componentes que está utilizando para acceder a la base de datos, no una característica de Firebird en sí. Como se mencionó anteriormente, Firebird siempre hace todo dentro de una transacción. Esto tiene un par de implicaciones para usted:

  • Usando un " Implícito " la transacción no puede ser más rápida que usar un " Explícito " transacción porque desde el punto de vista de Firebird, una transacción es una transacción, no importa quién la inició.
  • Obtener el mejor rendimiento a veces requiere un control preciso sobre " Commits " ;. Mientras que el "implícito" la transacción no puede ser más rápida que el " Explícito " transacción, el explícito podría ser más rápido porque puede controlar sus StartTransactions y Commits. Si bien generalmente desea hacer todas las actualizaciones de una base de datos dentro de una transacción (para que todas tengan éxito o fallen como un conjunto), a veces desea dividir las operaciones en varios grupos: si necesita insertar masivamente muchos registros, probablemente desee para confirmar uno cada 1000 registros más o menos.

Firebird no puede ejecutar comandos SQL sin una transacción.

PD: Obtiene los mejores resultados de rendimiento si confirma las transacciones, en lugar de revertirlas. Incluso si solo llamaste a SELECT y no cambiaste nada.

Además de lo que ya se dijo, tenga en cuenta que la transacción puede ser:

  • Leer-Escribir
  • Solo lectura

Para un SELECT, sería mejor usar una transacción de solo lectura

PD: Existen otros tipos de transacciones, pero estas dos son importantes para este tema.

Por lo general, la transacción agrega algunos gastos generales. Sin embargo, debe tener cuidado si no inicia alguna transacción predeterminada cuando se conecta a Firebird.

En mi experiencia, las transacciones implícitas tienden a ser predeterminadas para la retención de confirmación automática, por lo que deberían ser más lentas. Siempre puede cambiar el comportamiento predeterminado.

Pero recomendaría el uso de transacciones explícitas, ya que la retención de compromiso puede causarle problemas más adelante si bloquea demasiadas transacciones. Si lo hace, el acceso a Firebird puede reducirse drásticamente a medida que atraviesa todas las transacciones retenidas / bloqueadas para determinar el valor correcto de los datos.

Aquí hay algunas discusiones al respecto

http: //forums.devshed. com / firebird-sql-development-61 / difference-active-transaction-863103.html

http://www.slideshare.net/ibsurgeon/3-how-transactionswork

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top