Ver Mensaje Individual
  #2 (permalink)  
Antiguo 20/03/2011, 08:06
javiDP
 
Fecha de Ingreso: febrero-2008
Ubicación: Sevilla
Mensajes: 91
Antigüedad: 16 años, 2 meses
Puntos: 15
Respuesta: Capacidades de MySQL

Yo soy de los que opinan que mysql es tan potente como cualquier base de datos, siempre y cuando se diseñe y configure adecuadamente.

Dado que tienes una cantidad de informacion mas o menos importante (tampoco 3 millones de registros son tantos...), deberias plantearte las siguientes pautas:

Estas obligado a indexar ciertos campos de esos registros, a partir del millon de registros la busqueda secuencial (que es la que hace si no tienes indices apropiados) se torna muy muy lenta.

Has de crear indices complejos hacia los campos que sepas que van a ser la pauta de la consulta a la bd. Por ejemplo, si haces esta consulta:

select * from usuarios where nombre_usuario = 'pepito';

Esa es una consulta muy simple, pero con tantos registros, si no tienes indexada la columna nombre_usuario se vuelve extremadamente lenta. Deberias crear por ejemplo un indice de las 3 primeras letras de nombre_usuario, asi la bd por ejemplo cojeria las 3 primeras letras del valor de nombre_usuario, en este caso 'pep', y lo buscaria en el indice.

El indice internamente podria ser asi:

Indice Ant:
Antonio
Antoine
Antoñita

Indice Bel:
Belen
Belerofonte
Belencita

.....

Indice pep:
pepito
pepon
pepe

En ese ejemplo de indice, tienes 9 registros, 3 por indice. Sin indice, al comparar los nombres de usuario te compararia 1 por 1 los registros (9 en este caso) de forma secuencial. Con indices, compararia 'pep' con 'Ant', luego 'pep' con 'Bel' y luego 'pep' con 'pep'...en este caso como coincide, compararia 'pepe' con todos los registros dentro del indice 'pep'.

Ves la diferencia? De forma secuencial compara 9 registros de 9 hasta llegar a pepe, de forma indexada compara primero 3 indices y luego 3 registros dentro del indice 'pep' hasta llegar al correcto, en total 6. Te ahorras muchisimas comparaciones si tienes bien hechos los indices.

Tambien, si sabes que hay veces en que en la clausula where vas a tener mas de una columna, puedes indexar conjuntamente las columnas y entonces seria aun mas eficiente.


Te aconsejo estudiar el tema de los indices, busca un tutorial por google porque lo que yo te he puesto es solo un ejemplo basico.

Un saludo!