Maximo numero de columnas en SQL2000

11/08/2003 - 15:22 por Maria25 | Informe spam
Hola...

Acanbo de crear una tabla con unas 258 columnas, de varios tipos pero
oscilan entre varchar (4) y varchar (10).
Ahora mismo no tengo creado ningú indice y mis consultas son bastande
lentas,
Mi duda es la siguiente... cómo podria optimizarlo?

Sólo se me ocurre hacer 5 tablas de 50 columnas, y asi se reduce bastante el
tiempo.

Se os ocurre otra cosa a vosotros?

Un saludo

Preguntas similare

Leer las respuestas

#1 Emilio Boucau
11/08/2003 - 15:31 | Informe spam
Hola,

antes de fraccionar la tabla yo probaria de definir los indices necesarios y
recuperar solo los campos deseados en las consultas, nada de SELECT *

Saludos !

Emilio Boucau
Microsoft MVP SQL Server
http://www.portalsql.com
PASS Spanish Group
http://www.sqlpass.org

Buenos Aires - Argentina
Respuesta Responder a este mensaje
#2 Emilio Boucau
11/08/2003 - 16:29 | Informe spam
Maria,

si tenes los indices bien definidos el query los usara y no importara (hasta
el momento de la devolucion de los datos) cuantas columnas tenga tu tabla.
Hace eso primero y fijate, no tiene sentido optimizar un diseño si tenes una
tabla plana.

Saludos !

Emilio Boucau
Microsoft MVP SQL Server
http://www.portalsql.com
PASS Spanish Group
http://www.sqlpass.org

Buenos Aires - Argentina
Respuesta Responder a este mensaje
#3 Liliana Sorrentino
11/08/2003 - 16:47 | Informe spam
María,
además de los índices, como te indica Emilio, ¿hay algún motivo por el que
pienses que fraccionar la tabla mejorará el tiempo de respuesta de tus
consultas?
La tabla está normalizada ¿no? Si nos mandas un breve ejemplo del diseño y
el tipo de consultas que estás haciendo, podemos ver si hay algo más para
optimizar. Pero de todas maneras, los índices son indispensables.

Saludos... Liliana.

"Maria25" escribió en el mensaje
news:#
por supuesto, que selecciono sólo los campos deaseados,
pero además de indice, no se puede optimizar de alguna otra manera?

"Emilio Boucau" escribió en el mensaje
news:#
> Hola,
>
> antes de fraccionar la tabla yo probaria de definir los indices


necesarios
y
> recuperar solo los campos deseados en las consultas, nada de SELECT *

>
> Saludos !
>
> Emilio Boucau
> Microsoft MVP SQL Server
> http://www.portalsql.com
> PASS Spanish Group
> http://www.sqlpass.org
>
> Buenos Aires - Argentina
>
>


Respuesta Responder a este mensaje
#4 Miguel Egea
11/08/2003 - 21:19 | Informe spam
Hola María, Generalmente estoy 100 % de acuerdo con emilio, excepto si
hablamos de claves primarias naturales o artificiales, este va a ser quizá
el segundo punto de discordia.

Primero estudia el llenado medio de tus campos, los varchar(4) conviertelos
a char(4), verás por qué, sql pone los campos fijos delante en la página, y
los campos de longitud variable necesitan almacenar el desplazamiento, por
lo que cada varchar mide lo que mida +2bytes, sin embargo para buscar el
dato no tiene que leer la indireccion y luego extraer el dato, sino que por
ser la columna que es ya lo tiene. Espero que se entienda el galimatias.
Estudia para el resto, (tamaño superior a digamos 5) la ocupación media, si
es de más de la mitad, quizá te convenga que sean de longitud fija.
Si particionas en 4 la tabla, necesitaras integridad referencial, pero eso
no penalizará tus select a menos que necesites datos de todas las tablas. Si
necesitas datos solo de algunas de las tablas tendrás menos páginas que leer
(hasta cuatro veces menos en el mejor de los casos) y por tanto tus
consultas podrán rendir hasta 4 veces más.Aún así, esto es 'pan para hoy y
hambre para mañana', cuando tus tablas crezcan *4 serán igual de lentas que
ahora.
Crear índices es una buena opción, excepto que siempre pidas todos los datos
de la tabla.
Otra opción es partir horizontalmente en lugar de verticalmente, Es decir
tener tablas por año, por periodo, por letra alfabética o por algo que te
permita ir a una u otra tabla. Quizá puedas poner encima de estas tablas una
función definida por el usuario (udf) o un procedimiento almacenado y
también puede ayudarte a mejorar el rendimiento. Claro, que todas las
soluciones que te propongo, sin crear índices, pasan por lo mismo, leer
menos datos y por tanto poder hacerlo más rápido.
Cuentanos algo más y te exponemos nuestra opinión todos.


Un Saludo
Miguel Egea
http://www.portalsql.com
Microsoft SQL-SERVER MVP.

"Maria25" escribió en el mensaje
news:%
por supuesto, que selecciono sólo los campos deaseados,
pero además de indice, no se puede optimizar de alguna otra manera?

"Emilio Boucau" escribió en el mensaje
news:#
> Hola,
>
> antes de fraccionar la tabla yo probaria de definir los indices


necesarios
y
> recuperar solo los campos deseados en las consultas, nada de SELECT *

>
> Saludos !
>
> Emilio Boucau
> Microsoft MVP SQL Server
> http://www.portalsql.com
> PASS Spanish Group
> http://www.sqlpass.org
>
> Buenos Aires - Argentina
>
>


Respuesta Responder a este mensaje
#5 Emilio Boucau
11/08/2003 - 21:45 | Informe spam
Juajuajua ! Miguel, la diferencia la tendremos cuando Maria quiera definir
su Primary Key ... jajajajaja !

Por otro lado (para terminar de asustarla) te falto pedirle que haga una
analisis de densidad y en base a eso determine si los indices seran
consistentes en la operatoria o no !

;-)

Saludos !

Emilio Boucau
Microsoft MVP SQL Server
http://www.portalsql.com
PASS Spanish Group
http://www.sqlpass.org

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