Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

233
Vistas
Optimización de consultas indexadas = SQL

Esta es una parte de mis preguntas de exámenes anteriores:

Optimice lo siguiente y suponga que hay un índice en Members.lname:

 SELECT fname, lname FROM Members WHERE lname <> 'Rogers' AND memberType='Student';

Por lo tanto, he intentado:

 SELECT fname, lname FROM Members WHERE lname > 'Rogers' OR lname < 'Rogers'AND memberType='Student';

Intenté esto porque dividir <> fuerza el uso del índice; sin embargo, mi respuesta es incorrecta. Me preguntaba si alguien podría ayudarme y orientarme en la dirección correcta.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

En mi opinión, la consulta original en sí no se puede optimizar.

Que haya un índice en lname no debería tener ningún impacto en la consulta. Todos los miembros tendrán un nombre y algunos miembros serán Rogers. Entonces, el DBMS no debe usar el índice, sino simplemente leer la tabla completa.

"Optimizar lo siguiente", sin embargo, puede permitir optimizar la consulta indirectamente creando otro índice. Este índice debe contener al menos y comenzar con memberType :

 create index idx1 on members (membertype);

El uso de este índice para la consulta probablemente dependerá de lo que haya en la tabla. Si el 99 % de los miembros son estudiantes, el DBMS debería leer la tabla completa. Si son solo unos pocos estudiantes (digamos 3%), entonces tiene sentido usar el índice, y el DBMS usaría el índice para encontrar a los estudiantes en la tabla y luego verificaría lname en el registro.

Habiendo dicho esto, podríamos querer esto en su lugar:

 create index idx2 on members (membertype, lname);

entonces el DBMS lee el índice, encuentra a los estudiantes, ve inmediatamente si el nombre es Rogers y solo accede a la tabla para los registros deseados.

Un índice aún mejor sería un índice de cobertura que contuviera todas las columnas en cuestión, por lo que ya no es necesario leer la tabla, ya que toda la información está en el índice:

 create index idx3 on members (membertype, lname, fname);

Como se mencionó, el DBMS aún puede leer la tabla completa cuando asume que la mayoría de los registros coincidirán de todos modos. Los índices son solo una oferta al DBMS que puede usar o no.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda