UTNianos

Versión completa: [GDD]Preguntas teóricas
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas, estoy haciendo GDD, habiendo aprobado la practica solo me falta la teoría y la di mal dos veces ya, este es mi ultimo tiro cry. Buscando encontré estas dos preguntas:

1- Explique al menos 1 escenario en donde no seria adecuado usar sobre una tabla un índice de árbol B+
2- Si se sabe de antemano que hay 1 millon de registros en una tabla T, y que el minimo valor de una columna c de la tabla T es 1, siendo el dominio de c integer, y ademas se sabe que esta indexado sobre esa columna con un indice NON-CLUSTERED, con un árbol B.
Responda si el siguiente query select * from T where c >= 1, utiliza dicho índice para calcular el resultado. Justificar respuesta.

Alguno me puede dar una mano con las respuestas?

Mil gracias!
Hola como va?

Por casualidad las sacaste del examen 24/6/17 ?

Porque fueron las mismas que me tomaron a mi ese dia.

Yo en la teoría saqué 6, pero no estoy seguro de lo que puse.

La 1 la hice mal, pero tampoco estoy del todo seguro de haber hecho la 2 bien (aunque aprobé).

Esta fue mi respuesta textual que envié por mail:

2) Utiliza dicho indice para calcular el resultado?

NO. Ya que se está obteniendo el resultado de toda la tabla, utiliza directamente un escaneo sobre la misma.
Si, es ese parcial. Muchísimas gracias por la respuesta!
Mmm el 1 ni idea.

Para mi en el 2) sí, se utiliza el índice. Porque en la claúsula del "where" se consulta por una columna que se encuentra en el índice. (Véase aquí)
De todas maneras, luego se tiene que acceder a la tabla para obtener los demás campos que no se encuentran indexados.
Omnipresent

Segun entiendo y por lo que respondi en ese parcial, antes de elegir que metodo se va a usar, el motor analiza la situacion para ver si utiliza el indice o no. Como el minimo valor de esa columna es "1" y está devolviendo los registros con esa columna con valor "mayor o igual a 1", no tiene que filtrar nada, se devuelven todos los registros (un millon en este caso)

Acerca de eso podes leer:

https://docs.microsoft.com/en-us/sql/rel...-described

" However, a table scan could be the most efficient method if, for example, the result set of the query is a high percentage of rows from the table..."

Y aca

https://technet.microsoft.com/en-us/libr...l.80).aspx

"My tests show that a table scan often starts to perform better than a nonclustered index access when at least 10 percent of the rows are selected."

Creo que un poco el truco o la trampa del ejercicio tiene que ver con eso, que a pesar de haber un indice, como se seleccionan todos los registros, el motor no lo utiliza.

Saludos
Si la diste mal 2 veces, porque te queda solo un "tiro"? Son 4 las chances
Combinó práctica y teoría en 1 parcial que tiene 2 recus. Ya di mal 2 veces, me queda 1
Mira...
Simulé 1 millon de registros en una tabla con un indice No Clusterizado en un motor de SQL Server. Al analizar el plan de ejecución, observamos que utiliza el indice.

[Imagen: hkPHXm]

Al ver un indice por esa columna, el motor entiende que es lo mejor ya que evita hacer un escaneo de tabla preguntando si el registro es mayor o igual al valor.
Martin.

simulaste que el menor valor de la columna sea justamente 1 en esa tabla?

Me llama la atención que esté incorrecto porque creo fue el punto que me pusieron bien.

Saludos
Hello!

Hoy le pregunté al profesor que tomó estas preguntas y me compartió las respuestas:

1) Un caso simple en el cual no sería adecuado utilizar un índice/árbol es al aplicarlo sobre un campo sobre el cual nunca se va a hacer una búsqueda.

2) Como dijo chrisgel15, la respuesta es que hace un escaneo directo sobre la tabla. La razón es porque el motor emplea estadísticas (cuál es el mayor id, el menor id, la cant de elementos de la tabla, etc) y con dichas estadísticas se "da cuenta" que la consulta va requerir la mayor cantidad de elementos de la tabla. Por eso hace un scaneo directo sobre ella y no pasa por el índice, ya que es más performante hacer un barrido secuencial de la tabla que ir al árbol. Si la consigna hubiese dicho c >= x (siendo x otro número que no sea el mínimo) habría que analizar el caso.

También comentó que la razón por la que consulta de Martin. entró por el índice puede ser por el hecho de que no tiene configuradas las estadísticas, por ejemplo. Pero la respuesta se mantiene.

Saludos!
Hilando muy fino, sí. La respuesta es que luego de muchas ejecución el motor almacena estadísticas e infiere que es mejor no usar el indice.
Ahora bien... decir que lo usa porque así lo determina el motor también es válida. Teniendo en cuenta que en la cursada NUNCA le explican a los alumnos como funciona por atrás la base de datos y como determina la mejor forma de hacer las consultas.

A fin de cuentas, una u otra es correcta, pero el que decide eso es el profesor.

Saludos,
Buenisimo Omnipresent !!

A lacquaniti le preguntaste?

Fue el que me tomó esos puntos, se la puso a la mayoria (sobretodo con el 1). Por suerte yo zafé con la respuesta del 2.
(26-11-2017 21:32)chrisgel15 escribió: [ -> ]Buenisimo Omnipresent !!

A lacquaniti le preguntaste?

Fue el que me tomó esos puntos, se la puso a la mayoria (sobretodo con el 1). Por suerte yo zafé con la respuesta del 2.

Sisi, a Lacquaniti le pregunté thumbup3
URLs de referencia