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

[SOLUCIONADO] Índices en mi tabla

Estas en el tema de Índices en mi tabla en el foro de Bases de Datos General en Foros del Web. Hola. Tengo una gran tabla con los diversos campos, aunque estos son los importantes: id (int, autonumérico) ciudad (varchar) pais (varchar) latitud (float) longitud (float) ...
  #1 (permalink)  
Antiguo 01/07/2017, 05:54
 
Fecha de Ingreso: febrero-2013
Mensajes: 42
Antigüedad: 11 años, 9 meses
Puntos: 0
Pregunta Índices en mi tabla

Hola.

Tengo una gran tabla con los diversos campos, aunque estos son los importantes:
  • id (int, autonumérico)
  • ciudad (varchar)
  • pais (varchar)
  • latitud (float)
  • longitud (float)

Me interesa que el usuario busque por el nombre de una ciudad y la búsqueda obtenga todos los campos en sus resultados (un select *, vamos) lo más eficientemente posible, por lo que he pensado que sería importante crear un índice.

¿Crearíais el índice únicamente utilizando el campo "ciudad"?
¿O utilizaríais más campos en el índice para crear un unique index, utilizando por ejemplo (ciudad,pais)?

Gracias.
  #2 (permalink)  
Antiguo 01/07/2017, 06:11
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Índices en mi tabla

Que campos incluir en el indice depende de cuales vayan a ser las consultas mas utilizadas,

para el ejemplo que das yo crearia un cluster index por el campo ID, y un nonclustered con el campo ciudad, pais

Ahora esa tabla no se ve normalizada, te sugeriria crear un diccionario de paises y de ciudades y relacionar los id's de estas tablas con la tabla que ya tienes.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 01/07/2017, 06:23
 
Fecha de Ingreso: febrero-2013
Mensajes: 42
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Índices en mi tabla

Cita:
Iniciado por Libras Ver Mensaje
Que campos incluir en el indice depende de cuales vayan a ser las consultas mas utilizadas,

para el ejemplo que das yo crearia un cluster index por el campo ID, y un nonclustered con el campo ciudad, pais
Se me escapa un poco todo esto tan técnico...

¿Por qué crear un índice con el campo ID? No voy a buscar nada por ese campo. Lo pregunto desde la ignorancia.

Cita:
Iniciado por Libras Ver Mensaje
Ahora esa tabla no se ve normalizada, te sugeriria crear un diccionario de paises y de ciudades y relacionar los id's de estas tablas con la tabla que ya tienes.....
El tema del diccionario, ¿aporta algo en la eficiencia? Lo digo porque los datos los voy incorporando de ficheros de texto que voy obteniendo sobre la marcha y sería algo más costoso de hacer.

¡Muchas gracias por tus respuestas!
  #4 (permalink)  
Antiguo 01/07/2017, 07:13
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Índices en mi tabla

Cita:
Iniciado por Ommadawn Ver Mensaje
¿Por qué crear un índice con el campo ID? No voy a buscar nada por ese campo. Lo pregunto desde la ignorancia.
Porque me imagino que ese campo es tu llave primaria no? al ser asi cuando creas una llave primaria se crea por default un clustered index(indice fisico) y por los demas campos seria crear un nonclustered(indice logico)


Cita:
Iniciado por Ommadawn Ver Mensaje
El tema del diccionario, ¿aporta algo en la eficiencia? Lo digo porque los datos los voy incorporando de ficheros de texto que voy obteniendo sobre la marcha y sería algo más costoso de hacer.
Yo lo decia para tener la tabla normalizada, pero si estas haciendo inserciones como mencionas pues cada quien :P
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 01/07/2017, 08:03
 
Fecha de Ingreso: febrero-2013
Mensajes: 42
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: Índices en mi tabla

Cita:
Iniciado por Libras Ver Mensaje
Porque me imagino que ese campo es tu llave primaria no? al ser asi cuando creas una llave primaria se crea por default un clustered index(indice fisico) y por los demas campos seria crear un nonclustered(indice logico)
De acuerdo, se entiende, muchas gracias.

De todas formas, el usuario tengo intención que busque poniendo, o bien la ciudad únicamente, o bien ciudad y país.

¿Sería recomendable, pues, hacer el índice que comentas tú de ciudad+país? ¿Podría hacer tambien otro que fuera únicamente de ciudad (los dos índices)? Es decir... de la siguiente lista de posibles índices a crear, qué opción es más recomendable?
  1. Ciudad
  2. Ciudad + País
  3. Ciudad y Ciudad+País

Gracias.

Última edición por Ommadawn; 01/07/2017 a las 08:16
  #6 (permalink)  
Antiguo 01/07/2017, 09:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Índices en mi tabla

Los indices consumen espacio en disco, asi que recomendaria el de ciudad + pais
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: select, tabla
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 12:23.