Ayuda con Indices

23/02/2005 - 04:49 por Fer | Informe spam
Tengo una duda con respecto a los indices. Supongamos que tengo una Tabla
con campo1, campo2, campoN,y esta Tabla tiene dos indices: 1.- por
Campo1, Campo2
2.- por Campo5, Campo8

Que pasa en esta consulta:
Select campo4, campo6
From Tabla
Where campo1= "21"
and Campo12 = "Hola"

Al estar campo1 en el Where y sabiendo que éste forma parte del primer
indice (compuesto), entra por el indice o necesariamente debe esta el campo2
en el Where para que lo tome.

Gracias
Fer

Preguntas similare

Leer las respuestas

#1 Salvador Ramos
23/02/2005 - 09:06 | Informe spam
Hola:

Utiliza el índice (ojo leer la puntualización), no necesitas tener los dos
campos, ya que campo1 es el primero del índice.

Una puntualización importante: en principio utiliza el índice, pero también
dependerá de los valores que haya en esa columna de la tabla, ya que puede
decidir que sea más óptimo no utilizarlo. Por ejemplo, si el 80% de las
filas tienen el valor 21 en esa columna, o si la tabla tiene muy pocas filas
..., considerará más óptimo hacer un table scan (leer toda la tabla).

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net (información sobre SQL server, Windows DNA y .NET)

"Fer" escribió en el mensaje
news:
Tengo una duda con respecto a los indices. Supongamos que tengo una Tabla
con campo1, campo2, campoN,y esta Tabla tiene dos indices: 1.- por
Campo1, Campo2
2.- por Campo5, Campo8

Que pasa en esta consulta:
Select campo4, campo6
From Tabla
Where campo1= "21"
and Campo12 = "Hola"

Al estar campo1 en el Where y sabiendo que éste forma parte del primer
indice (compuesto), entra por el indice o necesariamente debe esta el
campo2
en el Where para que lo tome.

Gracias
Fer


Respuesta Responder a este mensaje
#2 Eladio Rincón
23/02/2005 - 13:47 | Informe spam
Hola,

como ha dicho Salva, depende de la cardinalidad de los valores

suponiendo que el índice por las columnas campo1 y campo2 es agrupado
tenemos lo siguiente:

si los valores son suficientemente selectivos (la cardinalidad comentada
antes), se realizará un clustered index seek para la condición where; como
en el nivel de hoja se encuentran los datos, se obtendría de ahí los valores
de campo3 y campo4.

si sólo está indexado por una columna (campo1 o campo2), se realizará un
clustered index scan porque uno de los dos valores faltaría para realizar la
operación "seek"


Eladio Rincón
SQL Server MVP

Solid Quality Learning (http://www.solidqualitylearning.com)
"Comparte lo que sabes, aprende lo que no sepas", FGG

Consulte el histórico del grupo en Google
http://groups.google.com/groups?gro....sqlserver

¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Fer" wrote in message
news:
Tengo una duda con respecto a los indices. Supongamos que tengo una Tabla
con campo1, campo2, campoN,y esta Tabla tiene dos indices: 1.- por
Campo1, Campo2
2.- por Campo5, Campo8

Que pasa en esta consulta:
Select campo4, campo6
From Tabla
Where campo1= "21"
and Campo12 = "Hola"

Al estar campo1 en el Where y sabiendo que éste forma parte del primer
indice (compuesto), entra por el indice o necesariamente debe esta el


campo2
en el Where para que lo tome.

Gracias
Fer


Respuesta Responder a este mensaje
#3 Alejandro Mesa
23/02/2005 - 14:37 | Informe spam
Fer,

No tengo nada que agregar a lo ya dicho por Salvador y Eladio. Solo quiero
preguntar que por que no haces una prueba y asi corroboras lo dicho. No
tienes que jecutar la sentencia, solo usa SET SHOWPLAN_TEXT ON antes de la
sentencia.

Ejemplo:

use northwind
go

set showplan_text on
go

select * from orders where orderdate >= '19960101' and orderdate < '19970101'
go

set showplan_text on
go


Result:

|--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Orders].[PK_Orders]),
WHERE:([Orders].[OrderDate]>=Convert([@1]) AND
[Orders].[OrderDate]<Convert([@2])))



AMB

"Fer" wrote:

Tengo una duda con respecto a los indices. Supongamos que tengo una Tabla
con campo1, campo2, campoN,y esta Tabla tiene dos indices: 1.- por
Campo1, Campo2
2.- por Campo5, Campo8

Que pasa en esta consulta:
Select campo4, campo6
From Tabla
Where campo1= "21"
and Campo12 = "Hola"

Al estar campo1 en el Where y sabiendo que éste forma parte del primer
indice (compuesto), entra por el indice o necesariamente debe esta el campo2
en el Where para que lo tome.

Gracias
Fer



Respuesta Responder a este mensaje
#4 Fer
23/02/2005 - 18:10 | Informe spam
Tienen algun link para poder identificar las :
Index Scan
Unique Scan
Nestled loop

y otras, que aparecen en el showplan_text on, para
aprender a leer como toma los datos el motor en las
consultas.

|--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Orders].
[PK_Orders]),
WHERE:([Orders].[OrderDate]>=Convert([@1]) AND
[Orders].[OrderDate]<Convert([@2])))

Muchas gracias
Saludos
Fer


Fer,

No tengo nada que agregar a lo ya dicho por Salvador y


Eladio. Solo quiero
preguntar que por que no haces una prueba y asi


corroboras lo dicho. No
tienes que jecutar la sentencia, solo usa SET


SHOWPLAN_TEXT ON antes de la
sentencia.

Ejemplo:

use northwind
go

set showplan_text on
go

select * from orders where orderdate >= '19960101' and


orderdate < '19970101'
go

set showplan_text on
go


Result:

|--Clustered Index Scan(OBJECT:([Northwind].[dbo].


[Orders].[PK_Orders]),
WHERE:([Orders].[OrderDate]>=Convert([@1]) AND
[Orders].[OrderDate]<Convert([@2])))



AMB

"Fer" wrote:

Tengo una duda con respecto a los indices. Supongamos




que tengo una Tabla
con campo1, campo2, campoN,y esta Tabla tiene dos




indices: 1.- por
Campo1, Campo2
2.- por Campo5,




Campo8

Que pasa en esta consulta:
Select campo4, campo6
From Tabla
Where campo1= "21"
and Campo12 = "Hola"

Al estar campo1 en el Where y sabiendo que éste forma




parte del primer
indice (compuesto), entra por el indice o




necesariamente debe esta el campo2
en el Where para que lo tome.

Gracias
Fer





.

Respuesta Responder a este mensaje
#5 Alejandro Mesa
23/02/2005 - 18:33 | Informe spam
Fer,

Puedes encontrarlo en los libros en linea.

Graphically Displaying the Execution Plan Using SQL Query Analyzer
mk:@MSITStore:C:\Program%20Files\Microsoft%20SQL%20Server\80\Tools\Books\optimsql.chm::/odp_tun_1_5pde.htm


AMB

"Fer" wrote:

Tienen algun link para poder identificar las :
Index Scan
Unique Scan
Nestled loop

y otras, que aparecen en el showplan_text on, para
aprender a leer como toma los datos el motor en las
consultas.

|--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Orders].
[PK_Orders]),
WHERE:([Orders].[OrderDate]>=Convert([@1]) AND
[Orders].[OrderDate]<Convert([@2])))

Muchas gracias
Saludos
Fer


>Fer,
>
>No tengo nada que agregar a lo ya dicho por Salvador y
Eladio. Solo quiero
>preguntar que por que no haces una prueba y asi
corroboras lo dicho. No
>tienes que jecutar la sentencia, solo usa SET
SHOWPLAN_TEXT ON antes de la
>sentencia.
>
>Ejemplo:
>
>use northwind
>go
>
>set showplan_text on
>go
>
>select * from orders where orderdate >= '19960101' and
orderdate < '19970101'
>go
>
>set showplan_text on
>go
>
>
>Result:
>
> |--Clustered Index Scan(OBJECT:([Northwind].[dbo].
[Orders].[PK_Orders]),
>WHERE:([Orders].[OrderDate]>=Convert([@1]) AND
>[Orders].[OrderDate]<Convert([@2])))
>
>
>
>AMB
>
>"Fer" wrote:
>
>> Tengo una duda con respecto a los indices. Supongamos
que tengo una Tabla
>> con campo1, campo2, campoN,y esta Tabla tiene dos
indices: 1.- por
>> Campo1, Campo2
>> 2.- por Campo5,
Campo8
>>
>> Que pasa en esta consulta:
>> Select campo4, campo6
>> From Tabla
>> Where campo1= "21"
>> and Campo12 = "Hola"
>>
>> Al estar campo1 en el Where y sabiendo que éste forma
parte del primer
>> indice (compuesto), entra por el indice o
necesariamente debe esta el campo2
>> en el Where para que lo tome.
>>
>> Gracias
>> Fer
>>
>>
>>
>.
>

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida