Crecimiento de bases de datos y uso del Inner Join

06/02/2007 - 15:01 por Pablo Garateguy | Informe spam
Maestros:

Les paso un par de preguntitas que hace un tiempo me andan rondando la cabeza.

1 - Cuando tengo una base, que el mdb digamos que ocupa 10 Gb, quedando 2 Gb
libres; y un log que ocupa 3 Gb, teniendo ocupado normalmente 1 Gb.

¿Puedo decir que me estoy quedando sin espacio?, ¿tendría que tener siempre
(para evitar el autogrow) espacio en la base para "soportar" el tamaño máximo
al que haya llegado el log?


2 - ¿Que es más prolijo y/o eficiente?
Cuando defino un Inner Join, definir ya restricciones (por ejemplo por
estado), o definir solamente las condiciones de la relación y luego en el
where agregar la restricción.

Saludos a todos
Pablo Garateguy
MCP - Visual Basic 6
MCTS - SQL Server 2005
 

Leer las respuestas

#1 Alejandro Mesa
06/02/2007 - 15:21 | Informe spam
Hola Pablo,

1 - Cuando tengo una base, que el mdb digamos que ocupa 10 Gb, quedando 2 Gb
libres; y un log que ocupa 3 Gb, teniendo ocupado normalmente 1 Gb.

¿Puedo decir que me estoy quedando sin espacio?, ¿tendría que tener siempre
(para evitar el autogrow) espacio en la base para "soportar" el tamaño máximo
al que haya llegado el log?



Bueno, esa pregunta solo podras responderla tu. Nosotros no tenemos idea
alguna de como funciona tu sistema, que tipo de actividades se llevan a cabo
en tu db, con que frecuencia, cuantos usuarios se conectan simultaneamente,
que tan frecuente usas "dbcc checkdb", "dbcc dbreindex", que tanto usas
"order by", union entre multiples tablas, etc. Debes monitorear tu db,
principalmente el crecimineto y en base a eso planificar su crecimineto.

Ahora, 10 GB no se considera una db grande, supongamos que tienes seteado
crecer 25% si se necesita espacio, eso hara que el SS tome 2.5 GBytes desde
disco (por ahora), cantidad que no lleva mucho tiempo para asignar. Porque no
quieres prender el "autogrow"?. Yo te recomiendo lo hagas para la data y el
log y si no quieres usar %, incrementa en valores fijos como por ejemplo 2 GB.

2 - ¿Que es más prolijo y/o eficiente?
Cuando defino un Inner Join, definir ya restricciones (por ejemplo por
estado), o definir solamente las condiciones de la relación y luego en el
where agregar la restricción.



Para operaciones de "inner join", la eficiencia sera la misma. Existe un
caso en particular donde usar el filtro en el join no dara los mismos
resultados que si pones la condicion en la clausula "where" y es cuando
usamos "group by all". Por claridad, la mayoria usamos las columnas de
relacion en el join uy cualquier otro filtro lo ponemos en la clausula
"where". Fijate que no se aplica lo mismo para "outer join".

Ejemplo:

use northwind
go

select
c.customerid, c.companyname, count(*) as cnt
from
dbo.customers as c
inner join
dbo.orders as oh
on c.customerid = oh.customerid
and oh.orderdate between '19980101' and '19980330'
group by all
c.customerid, c.companyname
go

select
c.customerid, c.companyname, count(*) as cnt
from
dbo.customers as c
inner join
dbo.orders as oh
on c.customerid = oh.customerid
where
oh.orderdate between '19980101' and '19980330'
group by all
c.customerid, c.companyname
go

La diferencia se da por la forma en que se aplica "group by all".


AMB


"Pablo Garateguy" wrote:

Maestros:

Les paso un par de preguntitas que hace un tiempo me andan rondando la cabeza.

1 - Cuando tengo una base, que el mdb digamos que ocupa 10 Gb, quedando 2 Gb
libres; y un log que ocupa 3 Gb, teniendo ocupado normalmente 1 Gb.

¿Puedo decir que me estoy quedando sin espacio?, ¿tendría que tener siempre
(para evitar el autogrow) espacio en la base para "soportar" el tamaño máximo
al que haya llegado el log?


2 - ¿Que es más prolijo y/o eficiente?
Cuando defino un Inner Join, definir ya restricciones (por ejemplo por
estado), o definir solamente las condiciones de la relación y luego en el
where agregar la restricción.

Saludos a todos
Pablo Garateguy
MCP - Visual Basic 6
MCTS - SQL Server 2005

Preguntas similares