columna indid de sysindexes

08/09/2004 - 06:22 por wandoo | Informe spam
Hola a todos, de ante mano mil gracias por el apoyo.
Alguien me puede explicar o mandar un link sobre
información de las columnas de sysobjects y de sysindexes

¿Porqué cuando realizo una consulta de los nombres de mis
tablas en una db y las filas de cada una debo de usar lo
siguiente?

WHERE (sysindexes.indid = 0 OR sysindexes.indid = 1)

Mi consulta completa queda así...

SELECT sysobjects.name, sysindexes.rowcnt FROM sysobject
INNER JOIN sysindexes
WHERE (sysobjects.xtype = 'U') --Hasta aquí voy bien
AND (sysindexes.indid = 0 OR sysindexe.indid = 1)
ORDER by sysobjects.name

Espero me puedan ayudar.

Preguntas similare

Leer las respuestas

#1 qwalgrande
08/09/2004 - 09:23 | Informe spam
Hola.

Yo tampoco lo tengo muy claro, así que me he informado un poco. Comparto
contigo lo que he visto, a la espera de que alguien pueda aportar algo más de
sabiduría.

En la tabla sysindexes, el índice cluster lleva un indid = 1 y no hay
entradas con indid = 0 para esa tabla. Si la tabla no tiene índice cluster,
no tiene entradas con indid = 1, si no con indid = 0. Este registro con indid
= 0 puede referirse a un índice non-clustered o , en caso de que la tabla no
tenga ningún índice, a la propia tabla. De hecho, el campo "name" es el
nombre de la tabla, y no el del índice. Así, si juntamos las entradas de
indid = 1 e indid = 0 obtenemos una lista de todas las tablas.

Todo esto lo he sacado de los BOL y unas cuantas consultas que he lanzado en
varias bbdd. Échale un vistazo. Espero que alguien pueda aportar alguna
información a más bajo nivel.

qwalgrande

"wandoo" wrote:

Hola a todos, de ante mano mil gracias por el apoyo.
Alguien me puede explicar o mandar un link sobre
información de las columnas de sysobjects y de sysindexes

¿Porqué cuando realizo una consulta de los nombres de mis
tablas en una db y las filas de cada una debo de usar lo
siguiente?

WHERE (sysindexes.indid = 0 OR sysindexes.indid = 1)

Mi consulta completa queda así...

SELECT sysobjects.name, sysindexes.rowcnt FROM sysobject
INNER JOIN sysindexes
WHERE (sysobjects.xtype = 'U') --Hasta aquí voy bien
AND (sysindexes.indid = 0 OR sysindexe.indid = 1)
ORDER by sysobjects.name

Espero me puedan ayudar.


Respuesta Responder a este mensaje
#2 Javier Loria
08/09/2004 - 12:20 | Informe spam
Hola:
Indid=0 es la estructura que se construye internamente cuando no hay
indice Clustered, se le llama HEAP. Indid=1 es un indice Clustered. Con ese
select estas seleccionando unicamente los "indices" Heap o Clustered que son
mutuamente exclusivos, cuando no hay Clustered no hay Heap. De esta manera
te da una fila por tabla con la informacion de la cantidad de filas.

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda

"wandoo" wrote in message
news:056601c4955b$73a60840$
Hola a todos, de ante mano mil gracias por el apoyo.
Alguien me puede explicar o mandar un link sobre
información de las columnas de sysobjects y de sysindexes

¿Porqué cuando realizo una consulta de los nombres de mis
tablas en una db y las filas de cada una debo de usar lo
siguiente?

WHERE (sysindexes.indid = 0 OR sysindexes.indid = 1)

Mi consulta completa queda así...

SELECT sysobjects.name, sysindexes.rowcnt FROM sysobject
INNER JOIN sysindexes
WHERE (sysobjects.xtype = 'U') --Hasta aquí voy bien
AND (sysindexes.indid = 0 OR sysindexe.indid = 1)
ORDER by sysobjects.name

Espero me puedan ayudar.
Respuesta Responder a este mensaje
#3 Adrian D. Garcia
08/09/2004 - 18:53 | Informe spam
La columna "indid" indica el tipo de "indice" (ya vamos a ver que no es tan
asi) asignad a una tabla.

Si el valor es 0 indica una tabla sin indice cluster. Este tipo de tabla se
llama HEAP. Las filas se insertan en donde hay lugar en las paginas y no hay
una secuencia de paginas a leer.

Si el valor es 1 indica una tabla con un indice cluster (agrupado). En este
tipo de indices la secuencia FISICA de las filas siguen el orden del indice.
Desde ya no puede haber mas de un indice cluster por tabla y en la tabla
sysindexes no puede haber mas que un entrada con indid 1 o con indid 0.

Si el valor se encuentra entre 2 y 250, indid se refiere a un indice no
cluster o secundario.

Si el valor es de 255, la entrada refiere a informacion de estadisticas no
relacionadas con un indice.

Los valores 251 (o 250?) al 254 estan reservados.

El echo de que estes filtrando por indid = 1 o = 0 es porque estas leyendo
la cantidad de filas (rowcnt) de la tabla (tenga un indice cluster o no).

Saludos
Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"wandoo" wrote in message
news:056601c4955b$73a60840$
Hola a todos, de ante mano mil gracias por el apoyo.
Alguien me puede explicar o mandar un link sobre
información de las columnas de sysobjects y de sysindexes

¿Porqué cuando realizo una consulta de los nombres de mis
tablas en una db y las filas de cada una debo de usar lo
siguiente?

WHERE (sysindexes.indid = 0 OR sysindexes.indid = 1)

Mi consulta completa queda así...

SELECT sysobjects.name, sysindexes.rowcnt FROM sysobject
INNER JOIN sysindexes
WHERE (sysobjects.xtype = 'U') --Hasta aquí voy bien
AND (sysindexes.indid = 0 OR sysindexe.indid = 1)
ORDER by sysobjects.name

Espero me puedan ayudar.
Respuesta Responder a este mensaje
#4 wandoo
09/09/2004 - 06:27 | Informe spam
Mil gracias a todos.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida