Pregunta

Si tengo una columna de la tabla con los datos y crear un índice en esta columna, será el índice de tomar misma cantidad de espacio de disco como la propia columna?

Me interesa porque estoy tratando de entender si realmente los árboles B mantienen copias de los datos de columna en los nodos de hoja o de alguna manera apunte a él?

Lo siento si esto una "voluntad de Java XML reemplazar?" tipo pregunta.

ACTUALIZACIÓN:

creado una tabla sin índice con una sola columna de GUID, filas 1M añadidos - 26MB

misma tabla con una clave principal (índice agrupado) - 25 MB (incluso menos!), El tamaño del índice - 176KB

misma mesa con una clave única (índice no agrupado) - 26MB , el tamaño del índice - 27MB

Así que sólo los índices no agrupados toman tanto espacio como los propios datos.

Todas las mediciones se realizaron en SQL Server 2005

¿Fue útil?

Solución

El árbol B apunta a la fila en la tabla, pero el propio árbol B todavía tiene algo de espacio en disco.

Algunas de base de datos, tiene mesa especial que incrustar el índice principal y los datos. En Oracle, se llama IOT -. Tabla de índices organizados

Cada fila de una tabla regular puede ser identificada por una ID interna (pero es específica de base de datos) que es utilizado por la B-Tree para identificar la fila. En Oracle, se llama rowid y se parece a AAAAECAABAAAAgiAAA:)

  

Si tengo una columna de la tabla con los datos y   crear un índice en esta columna, se   el índice de tomar misma cantidad de disco   espacio como la propia columna?

En un árbol B básico, que tiene el mismo número de nodo como el número de elemento de la columna.

Considere 1,2,3,4:

    1 
  / 
2
   \ 3 
      \ 4

El espacio exacto todavía puede ser un poco diferente (el índice es probablemente un poco más grande, ya que tiene que almacenar enlaces entre nodos, no se puede equilibrar perfectamente, etc.), y supongo que la base de datos puede utilizar la optimización de parte compresa del índice. Sin embargo, el orden de magnitud entre el índice y los datos de la columna debe ser el mismo.

Otros consejos

Estoy casi seguro de que es un buen DB dependiente, pero en general - espacio adicional si, que toman. Esto sucede debido a dos razones:

  1. De esta forma puede utilizar el hecho los datos en hojas BTree está ordenada;

  2. Usted gana ventaja de la velocidad de búsqueda como     usted no tiene que buscar hacia atrás y     sucesivamente a buscar material necesario.

PS acaba de comprobar nuestro servidor MySQL: por unos índices de tabla de 20GB tener 10 GB de espacio:)

A juzgar por este artículo , será, de hecho, tomar por lo menos la misma cantidad de espacio como los datos de la columna (en PostgreSQL, de todos modos). El artículo también va a sugerir una estrategia para reducir el uso del disco y la memoria.

Una manera de comprobar por sí mismo sería utilizar, por ejemplo, el derby DB, crear una tabla con un millón de filas y una sola columna, comprobar su tamaño, crear un índice en la columna y comprobar su tamaño nuevo. Si usted toma los 10-15 minutos para hacerlo, háganoslo saber los resultados. :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top