indices

26/05/2005 - 16:17 por Juan F Botero | Informe spam
Saludos

Tengo la siguiente duda, un indice es mas eficiente si es un campo numerico
(consecutivo en el tiempo) o un campo fecha unido a un consecutivo?

ej:

1 campo factura numerico
2 campo fecha_factura - factura

cual de los dos es mas eficiente?


Gracias por sus comentarios
 

Leer las respuestas

#1 Alejandro Mesa
26/05/2005 - 16:47 | Informe spam
Juan,

Depende de que tipo de consulta quieres hacer. Por ejemplo, puedes crear un
indice clustered por factura y uno nonclustered por fecha_factura.

Si la consulta es por ejemplo:

select factura, fecha_factura
from facturas
where factura = 123

sql server hara una operacion "clustered index seek" para encontrar la fila.
En cambio, si haces:

select factura, fecha_factura
from facturas
where fecha_factura = '20050501'

entonces sql server hara una operacion "index seek" en el indice
nonclustered, sin tener que hacer un "bookmark lookup" porque la informacion
de fecha_factura como factura, estan en el indice nonclustered. Si al query
anterior agregas una columna mas, y estos son los unicos indices que tiene la
tabla, entonces sql server hara una operacion "index seek", seguida por
"bookmark lookup", pues el indice nonclustered no tiene la data de la otra
columna y esta debe ser buscada en el indice clustered.

Una ultima opcion es que no uses clausula "where" o que la expresion de
filtro provoque que se devuelvan muchas filas o que no se pueda usar el
indice nonclustered, por lo que sql server hara un "clustered index scan"
para buscar la data.

Ejemplo:


use northwind
go

exec sp_helpindex 'dbo.orders'
go

set showplan_text on
go

select
orderid,
orderdate
from
dbo.orders
where
orderid = 10260

select
orderid,
orderdate
from
dbo.orders
where
orderdate = '19960723'

select
orderid,
orderdate,
customerid
from
dbo.orders
where
orderdate = '19960723'

select
orderid,
orderdate,
customerid
from
dbo.orders
where
orderdate >= '19960101' and orderdate < '19970101'
go

set showplan_text off
go


AMB

"Juan F Botero" wrote:

Saludos

Tengo la siguiente duda, un indice es mas eficiente si es un campo numerico
(consecutivo en el tiempo) o un campo fecha unido a un consecutivo?

ej:

1 campo factura numerico
2 campo fecha_factura - factura

cual de los dos es mas eficiente?


Gracias por sus comentarios




Preguntas similares