Aveces el gran cuello de botella es la forma en que estan planteadas las consultas SQL, por ejemplo:
Select * From Tabla , este es el error tipico de un desarrollador. Esta consulta le toma al motor mas tiempo que hacer una consulta tipo Select campo1,campo2,campo3 from Tabla. Debido a que al hacer un "select * from tabla" lo que hace el motor primero es hacer un DESCRIBE Table, para luego el mismo hacer el Select Campo1,Campo2 ... from table .
Otro error comun es no usar los binding en las consultas SQL, me explico
Select Campo1,Campo2 From Tabla where campo1 = 2
Select Campo1,Campo2 From Tabla where campo1 = 3
En los dos casos anteriores,para el motor SQL las dos sentencias son completamente diferentes y compila dos veces la consulta por mas que sean similares. Un motor de base de datos guarda en memoria cierto numero de consultas, para no tener que realizar siempre la compilacion de las mismas.
La solucion a esto es muy simple usando las binding variables un ejemplo seria mas o menos asi
Select Campo1,Campo2 From Tabla where campo1 =:x
donde "X" puedo reemplazarlo por "n" valores y el motor de base de datos entendera que es la misma consulta, y no gastara recursos tontamente volviendo a compilar la consulta.
En oracle el uso de binding variables esta por defecto, para mysql y postgres depende mucho que en el servidor esten levantados los modulos PDO_MYSQL y PDO_PGSQL
:P