Mostrando entradas con la etiqueta SQL Server 2005. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL Server 2005. Mostrar todas las entradas

jueves, 5 de abril de 2012

Vista Indexada


Mejorar el rendimiento de una vista.

Si al ejecutar una vista demora en devolver los resultados, una solución podría ser hacerla indexada, para que guarde la información y no tenga que unir todas las tablas que componen la vista cada vez.

Los índices se utilizan para buscar las filas con valores de columna específica rápidamente. Sin un índice, MySQL debe comenzar con el primer registro y luego leer a través de toda la tabla para buscar las filas correspondientes, y si la tabla es muy grande este proceso se demorará más.

Si la tabla tiene un índice para las columnas que se trate, MySQL puede determinar rápidamente la posición de buscar en el medio del archivo de datos sin tener que mirar todos los datos. Por tanto, los índices aumentan la velocidad de la consulta y si no están bien configurados o no se tienen, puede traer como consecuencia el bloqueo de MYSQL, que la Web vaya lenta o incluso que el servidor se bloque o se caiga.

En caso de que la consulta SQL continúe lenta y no se pueda solucionar mediante una vista indexada, habría que pensar en hacer Triggers.

Los índices se crearían en los campos que se utilizan para unir tablas (por ejemplo, si en una tabla se usa el idUsuario para unirlo con la otra que también tiene idUsuario, se crearían dos índices, ambos con idUsuario, para que la BD pueda unir las tablas más rápidamente). Esto sólo es necesario en caso de que no sean campos de clave primaria, ya que éstos se indexan automáticamente. Creo que se ganaría bastante si en las uniones se están usando campos que no son clave primaria...

Se puede probar a crear los índices de las tablas de una vista, porque eso se haría rápido (si por ejemplo una vista une 5 tablas, sería crear 5 índices o pocos más) y es fácil de comprobar si va bien o no. Y si no funciona o no optimiza lo suficiente, pues hay que intentar lo otro.

Problemas encontrados:

  • En SQL SERVER 2005, por ejemplo, si hay tablas que se unen con OUTER JOIN no es posible tenerlo en vistas indexadas ya que las filas pueden desaparecer de forma lógica de una vista indizada basada en OUTER JOIN cuando inserte datos en una tabla de base. Esto hace que las vistas OUTER JOIN que son relativamente complejas de implementar se actualicen de forma incremental y el rendimiento de la implementación sería más lento que para las vistas basadas en (INNER) JOIN estándar.
  • Hay ocasiones que si en vez de utilizar OUTER JOIN utilizamos INNER JOIN nos devolve menos registros de los que necesitamos.
  • Otro problema es la dependencia de vistas con otras vistas. Es decir, si tengo una vista definida sobre otra vista. SQL Server no permite indizar la vista del nivel superior. En este artículo (http://www.microsoft.com/latam/technet/productos/servers/sql/2005/impprfiv.mspx) dicen que hay que expandir la definición de la vista anidada a mano en la vista del nivel superior y luego crear un índice, indizando la vista interna o no.

viernes, 23 de marzo de 2012

Migrar BD de SQL Server 2005 a MySQL

Para Migrar una BD de SQL Server 2005 a MySQL (en este caso la tendremos en el PHPMyAdmin) se necesita utilizar el Microsoft Access y seguir los siguientes pasos:
  1. Abrir el SQL Server 2005 y exportar la BD a formato que sea reconocido por el Microsoft Access, recuerde seleccionar todas las tablas que desee exportar.
  2. Crear una BD en el Microsoft Access con plantilla en Blanco (de extensión .mdb), si la BD anterior tiene Usuario de administración a las BD, le recomiendo que a esta BD en la opción "Usuarios y Permisos" le añada el mismo usuario y contraseña de la anterior. De ser posible, nombre la BD igual a la exportada.
  3. Crear también en PHPMyAdmin una BD vacía, a la cuál irán a parar los datos que se encontrarán en la BD de Access.
  4. Necesita tener instalado el "MySql Connect ODBC" que sirve para crear la conexión entre la BD que estará en Microsoft Access y la de MySQL. (Recomiendo instalarlo con la opción "Typical").

  5. Nota: "mysql-connector-odbc-5.1.5-win32.msi" (se encuentra aquí: http://www.filestube.com/04334ce69d05311a03ea,g/mysql-connector-odbc-5-1-5-win32.html)
  6. Terminada la instalación vamos al Panel de Control/Herramientas Administrativas/Origenes de Datos(ODBC).
  7. Seleccionamos la pestaña "DSN de archivo" y damos clic en agregar.
  8. En la lista que aparece, seleccionamos "MySQL ODBC 5.1 Driver" y clic en "Siguiente".
  9. Aparecerá una ventana para escribir la ruta donde queremos guardar nuestra conexión, le damos a "Examinar" y por defecto estará en una carpeta llamada "Data Source", ponemos un nombre y la guardamos en esa carpeta.
  10. Al seleccionar "Guardar" volveremos a la ventana donde pedía escribir la ruta, pero esta vez con al ruta escrita, por tanto, damos clic en "Siguiente" y llegamos a una ventana de Confirmación, donde damos clic en "Finalizar". Con esto volveremos a la ventana donde entramos para agregar la conexión, esta vez con la conexión ya creada.
  11. Seleccionamos la conexión y le damos clic en "Configurar"
  12. Registramos los datos que se nos pide:
    • Server: Es la dirección donde se encuentra su base de datos, si es un"servidor local, la direccion es "Localhost".
    • User: El usuario que nos permite el acceso a la base de datos.
    • Password: La contraseña del Usuario.
    • Database: En este lugar debemos escribir el nombre de la base de datos a la que nos vamos a conectar.
  13. Para confirmar que todo está correcto, clic en "Test".
  14. Con esto ya tenemos creada nuestra conexión, ahora vamos a usarla. Entramos a nuestra BD en Access y vamos al menú Base de Datos, abajo aparecerán las tablas de la base de datos, Clic derecho en la primera y seleccionamos Exportar/Base de Datos OBDC.
  15. Al hacer esto, nos preguntara el nombre con el que guardaremos la tabla en MySQL, escribimos el mismo nombre. En esta ventana se le da el nombre a la tabla, con este nombre se guardara en MySQL y damos clic en "Aceptar".
  16. Aparecerá una ventana donde debemos escoger que conexión usaremos, seleccionamos la conexión que creamos y clic en "Aceptar", una ventana de confirmación nos avisará que la tabla fue migrada con éxito.
  17. Repetimos el proceso con todas las tablas, el contenido de éstas se traspasará automáticamente junto con ellas, no asi las relaciones o los tipos de claves.

Al terminar con nuestras tablas ya tenemos nuestra BD migrada de Access a MySQL.