Indice en columna tipo bit

03/01/2005 - 01:27 por Berta Gomez | Informe spam
Veo que al querer crear un indice en una columna tipo bit no me lo permite.
Sin embargo tengo consultas que hacen uso frecuente de una columna tipo bit
y estoy pensando poner un indice para tratar de agilizarla.

Que deberia hacer ? no usar el tipo bit sino convertirlo a un tinyint ?

que me recomiendan?

Preguntas similare

Leer las respuestas

#1 MAXI
03/01/2005 - 03:07 | Informe spam
Hola, crear un indice para un tipo Bit? no tiene mucho sentido porque la
mezcal siempre dara 50% y nunca lo usara SqlServer :(




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

Msn Messenger:

"Berta Gomez" escribió en el mensaje
news:%23$
Veo que al querer crear un indice en una columna tipo bit no me lo
permite.
Sin embargo tengo consultas que hacen uso frecuente de una columna tipo
bit
y estoy pensando poner un indice para tratar de agilizarla.

Que deberia hacer ? no usar el tipo bit sino convertirlo a un tinyint ?

que me recomiendan?




Respuesta Responder a este mensaje
#2 Berta Gomez
03/01/2005 - 04:24 | Informe spam
O sea que un select como este :

SELECT NUMERO,FECHA, NOMBRE,VALOR FROM CHEQUE WHERE STAT=1

siendo STAT una columna tipo BIT, no hay manera de optimizarla para que no
haga un recorrido secuencial ?

La distribucion de stat en la tabla es aprox. un 10% con STAT=0 y un 90% con
STAT=1





"MAXI" wrote in message
news:
Hola, crear un indice para un tipo Bit? no tiene mucho sentido porque la
mezcal siempre dara 50% y nunca lo usara SqlServer :(




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

Msn Messenger:

"Berta Gomez" escribió en el mensaje
news:%23$
> Veo que al querer crear un indice en una columna tipo bit no me lo
> permite.
> Sin embargo tengo consultas que hacen uso frecuente de una columna tipo
> bit
> y estoy pensando poner un indice para tratar de agilizarla.
>
> Que deberia hacer ? no usar el tipo bit sino convertirlo a un tinyint ?
>
> que me recomiendan?
>
>
>
>


Respuesta Responder a este mensaje
#3 Eladio Rincón
03/01/2005 - 09:43 | Informe spam
Hola Maxi, (Feliz Año),

no es del todo correcto tu comentario; si bien es cierto que la distribución
de los valores no ayudará mucho al motor para hacer "index seek"; la
consulta muchas veces puede ser cubierta por un "index scan" sin necesidad
de tener que acceder a las páginas de datos...

mira este ejemplo, también puede ayudar mostrar el plan de ejecución para
ver que unas veces usará el índice creado "ad-hoc" para la columna tipo bit:

set nocount on
go
use tempdb
go
drop table t
go
create table t (id int identity primary key, b bit, c char(5000) default
'a')
go
declare @i int
set @i=1
while @i<00
begin
insert into t (b) select @i%2
set @i=@i+1
end
go

select b valor_bit, count(*) from t group by b
go

set statistics io on
go
reads 0.
select id, b from t where b=0
go
reads 0.
select * from t where b=0
go
set statistics io off
go

create nonclustered index t_nci_b on t(b)
go
set statistics io on
go
reads 0.
select id, b from t where b=0
go
reads 0.
select * from t where b=0
go
set statistics io off

fijate en estas dos últimas consultas; la primera de ellas, como no necesita
para nada la página de datos (en el índice se encuentra ya la clave
primaria -- columna id -- y la clave del índice -- columna b --, no
necesitará acceder a la página de datos (con index scan de t_nci_b es
suficiente); sin embargo la segunda como a la columna c sólo se puede
acceder desde la página de datos por lo que deberá hacer un recorrido de la
tabla (en tablas con índice agrupado index scan)

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)?

"MAXI" wrote in message
news:
Hola, crear un indice para un tipo Bit? no tiene mucho sentido porque la
mezcal siempre dara 50% y nunca lo usara SqlServer :(




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

Msn Messenger:

"Berta Gomez" escribió en el mensaje
news:%23$
> Veo que al querer crear un indice en una columna tipo bit no me lo
> permite.
> Sin embargo tengo consultas que hacen uso frecuente de una columna tipo
> bit
> y estoy pensando poner un indice para tratar de agilizarla.
>
> Que deberia hacer ? no usar el tipo bit sino convertirlo a un tinyint ?
>
> que me recomiendan?
>
>
>
>


Respuesta Responder a este mensaje
#4 Eladio Rincón
03/01/2005 - 09:53 | Informe spam
Hola Berta,

¿podrías mostrar la definición de la tabla y sus índices? es posible que la
consulta sea cubierta por combinación de índices; mira este ejemplo (basado
en el mensaje anterior):

set nocount on
go
use tempdb
go
drop table t
go
create table t (id int identity primary key, b bit, id2 int default 2, id3
int default 3, c char(5000) default 'a')
go
declare @i int
set @i=1
while @i<00
begin
insert into t (b) select @i%2
set @i=@i+1
end
go

select b valor_bit, count(*) from t group by b
go

create nonclustered index t_nci_b on t(b)
go
create nonclustered index t_nci_id2_id3 on t(id2,id3)
go

go
set statistics io on
go
reads 0.
select id, b from t where b=0
go
reads 0.
select * from t where b=0
go
reads 0.
select id, id2, id3 from t where b=0
go
set statistics io off
go

a la consulta 1 le es suficiente hacer un index scan del indice no agrupado
t_nci_b; sin embargo, la consulta 2 deberá hacer un index scan del índice
agrupado -- en definitiva recorrer la tabla completa para llegar a las
columnas que no forman parte de ningún índice; en la consulta 3, se realiza
una combinación hash de los índices t_nci_b y t_nci_id2_id3: ¿por qué?
porque en el primer índice tenemos la columna id y b y en el segundo las
columnas id, id2 e id3.


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)?

"Berta Gomez" wrote in message
news:
O sea que un select como este :

SELECT NUMERO,FECHA, NOMBRE,VALOR FROM CHEQUE WHERE STAT=1

siendo STAT una columna tipo BIT, no hay manera de optimizarla para que


no
haga un recorrido secuencial ?

La distribucion de stat en la tabla es aprox. un 10% con STAT=0 y un 90%


con
STAT=1





"MAXI" wrote in message
news:
> Hola, crear un indice para un tipo Bit? no tiene mucho sentido porque la
> mezcal siempre dara 50% y nunca lo usara SqlServer :(
>
>
>
>
> Maxi
>
> Buenos Aires - Argentina
> Desarrollador .NET 3 Estrellas
> Microsoft User Group (MUG)
>
> Msn Messenger:
>
> "Berta Gomez" escribió en el mensaje
> news:%23$
> > Veo que al querer crear un indice en una columna tipo bit no me lo
> > permite.
> > Sin embargo tengo consultas que hacen uso frecuente de una columna


tipo
> > bit
> > y estoy pensando poner un indice para tratar de agilizarla.
> >
> > Que deberia hacer ? no usar el tipo bit sino convertirlo a un tinyint


?
> >
> > que me recomiendan?
> >
> >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Salvador Ramos
03/01/2005 - 09:55 | Informe spam
Hola:

Como indica Maxi, habitualmente no tiene mucho sentido. Pero si que se puede
crear sin problemas, indicanos que error te da.

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

"Berta Gomez" escribió en el mensaje
news:
O sea que un select como este :

SELECT NUMERO,FECHA, NOMBRE,VALOR FROM CHEQUE WHERE STAT=1

siendo STAT una columna tipo BIT, no hay manera de optimizarla para que
no
haga un recorrido secuencial ?

La distribucion de stat en la tabla es aprox. un 10% con STAT=0 y un 90%
con
STAT=1





"MAXI" wrote in message
news:
Hola, crear un indice para un tipo Bit? no tiene mucho sentido porque la
mezcal siempre dara 50% y nunca lo usara SqlServer :(




Maxi

Buenos Aires - Argentina
Desarrollador .NET 3 Estrellas
Microsoft User Group (MUG)

Msn Messenger:

"Berta Gomez" escribió en el mensaje
news:%23$
> Veo que al querer crear un indice en una columna tipo bit no me lo
> permite.
> Sin embargo tengo consultas que hacen uso frecuente de una columna tipo
> bit
> y estoy pensando poner un indice para tratar de agilizarla.
>
> Que deberia hacer ? no usar el tipo bit sino convertirlo a un tinyint
> ?
>
> que me recomiendan?
>
>
>
>






Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida