Вы находитесь на странице: 1из 7

Tips para optimizacin de acceso a base de datos.

1. Seleccionar el tipo de base de datos apropiado.


Seleccione el tipo de base de datos apropiado desde el principio. Con el paso
del tiempo muchos sitios web comienzan a volverse populares y a aumentar
drsticamente la cantidad de visitas. Despus de todo ese es el objetivo de
todos los que tenemos un sitio web.
Si posee un sitio web popular o proyecta que va a serlo, planee esto desde el
principio o est atento a realizar las actualizaciones necesarias cuando as lo
requiera el caudal de actividad.
Mucha gente utiliza ASP + Microsoft Access. ASP y Access son estupendos para
desarrollar rpidamente una aplicacin web sin la necesidad de ser un superprogramador.
Durante los primeros meses, mientras acceden unos pocos visitantes por da al
sitio web, todo funciona brbaro. Access est diseado para manejar hasta 256
lecturas y 1 escritura a la vez. Si lee y escribe en su base de datos Access con
cientos de personas visitando su sitio web, los accesos a la base de datos
comenzarn a competir entre s. Cuando esto ocurre, Access y ASP toman y
bloquean gran cantidad de memoria y recursos del servidor, generando una
bola de nieve que termina por hacerlo fallar y detenerlo.
Considere el uso de SQL Server, el cual est diseado para manejar miles de
conexiones concurrentes. Access es una pequea base de datos de oficina que
funciona muy bien para sitios web pequeos con no ms de 200 sesiones por
da.
2. Disear correctamente la estructura de la base de datos.
Disee su base de datos apropiadamente. Una base de datos normalizada es
usualmente un buen comienzo. Cree ndices para las columnas que son
frecuentemente utilizadas como criterio de seleccin (WHERE ...) u
ordenamiento (ORDER BY ...) en las consultas.
3. Optimizar consultas SQL
Optimice sus consultas SQL. Especificar la lista de columnas, en contraposicin
a SELECT *, es una mejor prctica que tiene un impacto notable en el
rendimiento. Pero construir una consulta que devuelva slo las filas necesarias
y haga un buen uso de los ndices existentes har una gran diferencia.
Por otro lado, deje que la base de datos haga el trabajo. Construya consultas
SQL (o procedimientos almacenados en SQL Server) que devuelvan los datos
que necesita directamente desde la base de datos en contraposicin a la
ejecucin de complejas consultas SQL a travs de la interfaz de ADO.
Base de datos
Ing. Jorge Santos

Tips para optimizacin de acceso a base de datos.

4. No almacenar objetos binarios de gran tamao.


No almacene objetos binarios de gran tamao (como imgenes) en bases de
datos a menos que sea irremediablemente necesario, especialmente si utiliza
bases de datos Access.
Al recuperar estos objetos a travs de recordsets, los mismos son almacenados
en memoria ocupando gran cantidad de espacio. En lugar de almacenar
imgenes o archivos en las bases de datos, almacene la URL de la
imagen/archivo en un campo de texto as puede luego referenciarlo en las
pginas de la aplicacin.

5. Las cadenas de conexin.


Utilice cadenas de conexin DSN-Less siempre que sea posible. Utilice ADO y
OLEDB, no DAO u ODBC. Si necesita utilizar s o s un ODBC DSN, utilice un DSN
de Sistema (System DNS).
Tambin use exactamente la misma cadena de conexin en toda la aplicacin
con el objetivo de aprovechar al mximo el uso de agrupacin de las
conexiones (pooling).
En el caso de utilizar bases de datos SQL Server utilice la directiva Network
Library=DBMSSOCN en la cadena de conexin para forzar el uso de TCP/IP en
la conexin a la base de datos.

6. Abrir/cerrar conexiones en los momentos apropiados.


Abra las conexiones justo antes de utilizarlas y cirrelas tan pronto como deje
de necesitarlas. El modo de trabajo debe ser el siguiente: Conectar Obtener/Guardar Datos - Desconectar. Siempre cierre los objetos de ADO y
asgnelos a "nothing". Por ejemplo:

<%
Dim Conexion, RS
Set Conexion = Server.CreateObject("ADODB.Connection")
Conexion.ConnectionString = [Cadena de Conexin ADO]
Conexion.Open
Set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = Conexion
RS.Source = "SELECT ..."

Base de datos
Ing. Jorge Santos

Tips para optimizacin de acceso a base de datos.

RS.Open
'...
'Utilizar los datos existentes en el recordset RS
'...
RS.Close
Set RS = Nothing
Conexion.Close
Set Conexion = Nothing
%>

7. Evitar el uso del archivo "adovbs.inc"


Evite el uso del archivo "adovbs.inc". Si necesariamente debe utilizar
constantes para las propiedades, defina el subconjunto que necesite. Este
archivo define muchsimas constantes, la mayora de las cuales seguramente
nunca utilizar (pero sern cargadas en memoria...).

8. No almacenar conexiones y recordsets en objetos sesin o application.


Muchos programadores se ven tentados a almacenar conexiones y recordsets
en objetos Session/Application, as no deben crear instancias en cada pgina
ASP.
En tales casos asumen que esto es ms eficiente, pero no lo es. Este es uno de
los peores errores que se pueden cometer.
Siempre cree y destruya los objetos de ADO en la misma pgina. Nunca los
mantenga entre sesiones.

9. Extraer de la base de datos solo la informacin necesaria.


Slo extraiga de la base de datos la informacin que necesita; evite traer
columnas innecesarias. Por ejemplo, si posee una tabla con los datos
personales de los estudiantes de un colegio y necesita mostrar una lista con los
nombres de los mismos no utilice la siguiente consulta:
SELECT * FROM estudiantes
Ser ms rpida y consumir menos recursos una consulta como la siguiente:
Base de datos
Ing. Jorge Santos

Tips para optimizacin de acceso a base de datos.


SELECT Apellido, Nombre FROM estudiantes

10.Utilizar cursores y modos de bloqueo apropiados.


Utilice cursores y modos de bloqueo apropiados. Si todo lo que necesita es leer
datos de un recordset y mostrarlo en la pantalla (creando una tabla HTML por
ejemplo), entonces utilice la configuracin por defecto (forward-only, readonly). Comprenda y experimente con las diferentes combinaciones para
analizar cmo vara el rendimiento del acceso a datos.

Tipos de cursores para la propiedad RecordSet.CursorType

Tipo

Valor

Descripcin

adOpenForwardOnly

Cursor por defecto; permite recorrer el recordset en


forma secuencial.

adOpenKeySet

Permite moverse hacia delante y atrs en el recordset.


Permite observar las modificaciones en los datos, pero no
si existen ingresos de nuevos registros.

adOpenDynamic

Permite moverse en cualquier sentido, viendo cualquier


ingreso, modificacin, eliminacin de datos en el
recordset.

adOpenStatic

Permite moverse en cualquier sentido, pero no se ver


ningn cambio ocurrido en la tabla.

Tipos de bloqueo para la propiedad RecordSet.LockType

Tipo

Valor

Descripcin

Base de datos
Ing. Jorge Santos

Tips para optimizacin de acceso a base de datos.

adLockReadOnly

Es el bloqueo por defecto y no permite modificar los


registros de la tabla.

adLockPessimistic

Una vez que la tabla es abierta, la misma queda


bloqueada para los dems usuarios.

adLockOptimistic

La tabla slo ser bloqueada a los dems usuarios


mientras se ejecute una operacin de actualizacin
(update). De esta forma la tabla se bloquear durante
menos tiempo que con el mtodo anterior.

adBatchOptimistic

Los registros sern actualizados por lotes (batch).

11.Utilizar variables objeto.


Una forma garantizada de mejorar el rendimiento mientras se recorre un
recordset es utilizar variables objeto apuntando a miembros de las colecciones.
Por ejemplo, considere el siguiente recorrido a travs del recordset mostrando
los campos Nombre y Apellido:
While Not RS.EOF
Response.Write (RS("Nombre") & " " & RS("Apellido") & "<BR>")
RS.MoveNext
WEnd
Puede hacer que este cdigo se ejecute ms rpido reemplazndolo por el
siguiente:

Set Nombre = RS("Nombre")


Set Apellido = RS("Apellido")
While Not RS.EOF
Response.Write (Nombre & " " & Apellido & "<BR>")
RS.MoveNext
WEnd
En este ltimo caso se utilizan dos variables asignadas a campos particulares
de la coleccin Fields del recordset (recuerde que la coleccin Fields es la
Base de datos
Ing. Jorge Santos

Tips para optimizacin de acceso a base de datos.


coleccin por defecto). Esta forma de trabajo insume menos recursos y
funciona ms rpido.

12.La propiedad CacheSize del objeto RecordSet.


El tamao del cach de un recordset es el nmero de filas que ADO lee a la vez
desde la base de datos. Por defecto este valor es 1. Esto significa que, cuando
se utilizan cursores, cada vez que se mueve de un registro a otro, el mismo
debe ser trado desde la base de datos.
Aumentando el tamao del cach a 10, por ejemplo, se colocarn en el buffer
de ADO de a 10 registros a la vez. Acceder un registro que se encuentra dentro
del cach de ADO es ms rpido que traerlo desde la base de datos.
Una vez abierto el recodset, puede modificar el tamao del cach de ADO
utilizando la propiedad CacheSize:
RS.CacheSize = 10
No hay un tamao ideal para asignarle al cach, ya que esto depender de la
tarea a realizar; pero incrementando su tamao por encima de 1
invariablemente mejorar el rendimiento.

13.Una conexin por pgina.

Establecer una conexin a una base de datos consume tiempo. El siguiente es


un ejemplo de cdigo mal realizado, ya que abre conexiones a una misma base
de datos ms de una vez en una misma pgina:
<%
Dim Conexion, RS, ID
Set Conexion = Server.CreateObject("ADODB.Connection")
Conexion.Open "[cadena de conexin]"
Set RS = Server.CreateObject("ADODB.RecordSet")
RS.Open "SELECT ID FROM tabla1 ORDER BY id DESC", Conexion
ID = RS("id")
RS.Close
Set RS = Nothing
Conexion.Close
Set Conexion = Nothing
Base de datos
Ing. Jorge Santos

Tips para optimizacin de acceso a base de datos.


Set Conexion = Server.CreateObject("ADODB.Connection")
Conexion.Open "[cadena de conexin]"
Conexion.Execute "INSERT INTO tabla1 (id) VALUES(" & id + 1 & ")"
Conexion.Close
Set Conexion = Nothing
%>
El cdigo anterior obtiene el valor del campo "id" de la tabla "tabla1" de la
base de datos. Luego crea un nuevo registro con el valor de "id" incrementado
en 1. El error de este cdigo es cerrar la conexin a la base de datos entre la
ejecucin de las consultas SQL.
Ese cdigo puede ser reescrito ms apropiadamente de la siguiente manera:
<%
Dim Conexion, RS, ID
Set Conexion = Server.CreateObject("ADODB.Connection")
Conexion.Open "[cadena de conexin]"
Set RS = Server.CreateObject("ADODB.RecordSet")
RS.Open "SELECT id FROM tabla1 ORDER BY id DESC", Conexion
ID = RS("id")
RS.Close
Set RS = Nothing
Conexion.Execute "INSERT INTO tabla1 (id) VALUES(" & id + 1 & ")"
Conexion.Close
Set Conexion = Nothing
%>
La diferencia es que en este caso la conexin a la base de datos slo se abre
una vez, ahorrndose el tiempo de cierre y reapertura.

Base de datos
Ing. Jorge Santos

Вам также может понравиться