Compartir el cursor es (o fue) una gran ventaja sobre la competencia. Básicamente, el mismo plan de consulta se usa para consultas coincidentes. Una aplicación tendrá un conjunto estándar de consultas emitidas (por ejemplo, obtener los pedidos para esta identificación de cliente). La forma más simple es tratar cada consulta individualmente, de modo que si ve 'SELECCIONAR * DE PEDIDOS DONDE ID_COMPRESOR =: b1', observa si la tabla ORDERS tiene un índice en CUSTOMER_ID etc. Como resultado, puede pasar tanto tiempo buscando trabajo hasta metadatos para obtener un plan de consulta como realmente recuperar los datos. Con simples búsquedas por clave, un plan de consulta es fácil. Las consultas complejas con varias tablas unidas en columnas sesgadas son más difíciles.
Oracle tiene un caché de planes de consulta, y los planes anteriores/menos usados se han agotado ya que se requieren nuevos.
Si no almacena en caché los planes de consulta, existe un límite en lo inteligente que puede hacer su optimizador, ya que mientras más inteligencia codifique, mayor será el impacto que tendrá en cada consulta procesada. Las consultas de caché significa que solo incurre en esa sobrecarga la primera vez que ve la consulta.
El 'inconveniente' es que para que el intercambio de cursor sea efectivo, debe usar variables de vinculación. Algunos programadores no se dan cuenta de eso y escriben código que no se comparte y luego se quejan de que Oracle no es tan rápido como mySQL.
Otra ventaja de Oracle es el registro de UNDO. A medida que se realiza un cambio, la 'versión anterior' de los datos se escribe en un registro de deshacer. Otra base de datos mantiene las versiones anteriores del registro en el mismo lugar que el registro. Esto requiere operaciones de limpieza de estilo VACUUM o te encuentras con problemas de espacio y organización. Esto es más relevante en bases de datos con alta actividad de actualización o eliminación.
También Oracle no tiene un registro de bloqueo central. Un bit de bloqueo se almacena en cada registro de datos individual. SELECT no toma un bloqueo. En las bases de datos donde SELECT se bloquea, puede hacer que varios usuarios lean datos y se bloqueen entre ellos o eviten actualizaciones, introduciendo límites de escalabilidad. Otras bases de datos bloquearían un registro cuando se realizara un SELECCIONAR para garantizar que nadie más pudiera cambiar ese elemento de datos (por lo que sería coherente si la misma consulta o transacción volviera a mirar la tabla).Oracle usa UNDO para su modelo de coherencia de lectura (es decir, busca los datos tal como aparecieron en un momento específico).