Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Pregunta sobre índices.

Estas en el tema de Pregunta sobre índices. en el foro de Bases de Datos General en Foros del Web. Como todos sabemos, para que un motor de base de datos utilice el índice hay que usar el 50% de los campos del índice +1. ...
  #1 (permalink)  
Antiguo 25/01/2005, 12:43
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 8 meses
Puntos: 7
Pregunta sobre índices.

Como todos sabemos, para que un motor de base de datos utilice el índice hay que usar el 50% de los campos del índice +1.

Mi pregunta es:
Si tengo un índice de 6 campos de los cuales estoy usando 3 campos. Me falta un campo para formar el 50 + 1.
Realmente los demás campo no me importa lo que traiga y estos campo no son nulos.

Yo puedo preguntar por los demás campos si no es nulo? Utilizaría el índice?
De esa forma usaría Full Index, que me dicen?


Quedaría asi:
Código:
Where Campo1_requerido = 'XXX'
  and Campo2_requerido = 'XXX'
  and Campo3_requerido = 'XXX'
  and Campo4 is not null
  and Campo5 is not null
  and Campo6 is not null
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--
  #2 (permalink)  
Antiguo 25/01/2005, 15:24
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 6 meses
Puntos: 25
No has hecho el análisis de si sería mas optimo tener 2 indices?

INDEX 1:
Campo1_requerido
Campo2_requerido
Campo3_requerido

INDEX 2:
Campo4
Campo5
Campo6

Si usas SQL Server puedes ver el plan de ejecucion para ver si toma ambos índices
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #3 (permalink)  
Antiguo 25/01/2005, 20:52
Avatar de RsOfT  
Fecha de Ingreso: marzo-2002
Ubicación: InterNET
Mensajes: 1.121
Antigüedad: 22 años, 8 meses
Puntos: 7
Bueno, creo que si sería lo más óptimo.
Lo que sucede es que crearle un índice a esa tabla representaría 12GB de espacio en disco. Lo que representa un mes de vida menos en la base de datos, ya que nuestra base de datos crece 18 GB mensualmente.
Esa tabla es de 45 GB que representa varias decenas de millones de registros.

El índice que tiene actualmente creado es el del primary key.

Es por eso que quería saber si al poner los campos en el where condition aunque sea is not null, el motor de base de datos utiliza las bondades que representa un índice.

Qué me recomiendas?
__________________
.::RsOfT::.
--El que se aferra a lo conocido, nunca conocerá lo desconocido--
--Es intentando lo imposible como se realiza lo posible--
--Es de pésimo gusto contentarse con algo mediocre cuando lo excelente está a nuestro alcance--
  #4 (permalink)  
Antiguo 26/01/2005, 16:42
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años, 6 meses
Puntos: 25
Haz la prueba.

1) Haz la sentencia sin ningun "tweak" y revisa el Execution Plan ([ctrl]+[L] en el Query Analyzer), ahi debes de observar si utiliza el índice o no (Index vs Table Scan).

2) Reescribe la sentencia con los NOT IS NULL y revisa de nuevo el Execution Plan, si lo que quieres es cierto, debes de ver que se usa el índice y no un Table Scan.

PD. ¿Tu indice primario ocupa esos 12GB que dices? Si eso es, entonces un indice secundario ocuparía un poco mas de la mitad (unos 7 GB)
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche

Última edición por Mithrandir; 26/01/2005 a las 16:43
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:40.