Anda di halaman 1dari 18

BASE DE DATOS

AVANZADA I
UNIDAD I: BASE DE DATOS Y TABLAS
TABLAS PARTICIONADAS
Proceso donde tablas muy grandes son divididas en mltiples partes ms
pequeas.

Al separara un tabla grande en tablas individuales ms pequeas, las


consultas que acceden slo a una fraccin de los datos pueden correr ms
rpido porque hay menos datos que escanear.
Ventajas de tablas Particionadas

Ttulo Presentacin Ms rpido y eficiente acceso a


datos.
El desempeo incrementa para
operaciones en paralelo con
servidores multiprocesadores
cada procesador puede acceder a
mltiples particiones
simultneamente.
PARTICIONAMIENTO
VERTICAL

Se usa para incrementar el desempeo de SQL

La consultar retorna todas las columnas de una tabla que


contiene un nmero de columnas de texto muy amplio.

La particin vertical divide una tabla en dos o ms tablas


que contienen diferentes columnas

4
Empleado

EmpleadoID
Nombre
Apellidos
Empleado

EmpleadoID
Nombre
Apellidos
EmpleadoFoto
Foto
EmpleadoID
Foto

5
PARTICIONAMIENTO HORIZONTAL

Divide a una tabla en mltiples tablas que contienen el mismo


nmero de columnas pero menos filas.
Las consultas que requieren datos para un ao especfico slo
referenciarn la tabla apropiada.
Existen dos enfoques para este tipo de particionamiento: el
primero es crear una nueva tabla particionada y simplemente
copiar los datos desde su tabla existente en la nueva tabla y
renombrarla. El segundo enfoque es particionar una tabla
existente reconstruyendo o creando un ndice agrupado en la
tabla.

6
Lmites LEFT y RIGHT
CREATE PARTITION FUNCTION Ejemplo(int)

AS RANGE LEFT FOR VALUES(100,1000,10000)

CREATE PARTITION FUNCTION Ejemplo1(int)

AS RANGE RIGHT FOR VALUES(100,1000,10000)

Rangos
Particin Valores (LEFT) Valores (RIGHT)
1 <=100 <100
2 >100 AND <=1000 >=100 AND <1000
3 >1000 AND <=10000 >=1000 AND <10000
4 >10000 >=10000
Caso Prctico 01

-- Crear una funcin de particin


CREATE PARTITION FUNCTION PedidosxDecada(datetime)
AS RANGE RIGHT
FOR VALUES ('2000-01-01', '2010-01-01')

-- Filegroup para pedidos< 01/01/2000


ALTER DATABASE BD_Negocios ADD FILEGROUP Pedidos2000B

-- -- Filegroup para pedidos>= 01/01/2000 AND <= 31/12/2009


ALTER DATABASE BD_Negocios ADD FILEGROUP Pedidos2010B

-- Filegroup para pedidos>= 01/01/2010


ALTER DATABASE BD_Negocios ADD FILEGROUP Pedidos2010A
Caso Prctico
--Creando archivos para los FileGroup
-- Pedidos2000B filegroup
ALTER DATABASE BD_Negocios
ADD FILE(NAME = Pedidos2000B, FILENAME = 'D:\Pedidos2000B.ndf')
TO FILEGROUP Pedidos2000B

-- Pedidos2010B filegroup
ALTER DATABASE BD_Negocios
ADD FILE(NAME = Pedidos2010B, FILENAME = 'D:\Pedidos2010B.ndf')
TO FILEGROUP Pedidos2010B

-- Pedidos2010A filegroup
ALTER DATABASE BD_Negocios
ADD FILE(NAME = Pedidos2010A, FILENAME = 'D:\Pedidos2010A.ndf')
TO FILEGROUP Pedidos2010A
GO
Caso Prctico

-- Crear un particin scheme usando un filegroup diferente para cada particin


CREATE PARTITION SCHEME PedidosxDecadaSC
AS PARTITION PedidosxDecada
TO (Pedidos2000B, Pedidos2010B, Pedidos2010A)

--Crear la tabla donde se utilizara las particiones


CREATE TABLE Pedidos_cab(
idPedido int NOT NULL,
idCliente varchar(20) NULL,
Fecha datetime NULL,
Total money NOT NULL)
ON PedidosxDecadaSC(Fecha)
Para saber en qu particin se encuentra la data se utilizara el siguiente comando
Transac-SQL $PARTITION, este regresa el nmero de particin en el cual se
encuentra la data.
Caso Prctico 02
create database empresa
on
(name=empresa_data, filename='c:\datos\empresa_data.mdf')

ALTER DATABASE empresa ADD FILEGROUP FG01


ALTER DATABASE empresa ADD FILEGROUP FG02
ALTER DATABASE empresa ADD FILEGROUP FG03
ALTER DATABASE empresa ADD FILEGROUP FG04
ALTER DATABASE empresa ADD FILEGROUP FG05
ALTER DATABASE empresa ADD FILE (NAME=empresa1, FILENAME='c:\datos\empresa1.ndf') TO FILEGROUP
FG01
ALTER DATABASE empresa ADD FILE (NAME=empresa2, FILENAME='c:\datos\empresa2.ndf') TO FILEGROUP
FG02
ALTER DATABASE empresa ADD FILE (NAME=empresa3, FILENAME='c:\datos\empresa3.ndf') TO FILEGROUP
FG03
ALTER DATABASE empresa ADD FILE (NAME=empresa4, FILENAME='c:\datos\empresa4.ndf') TO FILEGROUP
FG04
ALTER DATABASE empresa ADD FILE (NAME=empresa5, FILENAME='c:\datos\empresa5.ndf') TO FILEGROUP
FG05 11
CREATE PARTITION FUNCTION pfAnualR(int) AS RANGE RIGHT FOR
VALUES(2008,2009,2010,2011)

CREATE PARTITION FUNCTION pfAnualL(int) AS RANGE LEFT FOR


VALUES(2008,2009,2010,2011)

CREATE PARTITION SCHEME psAnualR AS PARTITION pfAnualR TO ([FG01], [FG02], [FG03],


[FG04], [FG05])

CREATE PARTITION SCHEME psAnualL AS PARTITION pfAnualL TO ([FG01], [FG02], [FG03],


[FG04], [FG05])

CREATE TABLE tblEstadosR


(Ano int, Mes int, Dia int, Tipo varchar(30),
Importe float) ON psAnualR(Ano)

CREATE TABLE tblEstadosL


(Ano int, Mes int, Dia int, Tipo varchar(30),
Importe float) ON psanualL(Ano) 12
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2007,08,22,'Cargo',13.00)
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2008,08,22,'Cargo',34.00)
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2009,08,22,'Cargo',23.00)
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2010,08,22,'Cargo',78.00)
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2011,08,22,'Cargo',98.00)
INSERT INTO tblEstadosR (Ano, Mes, Dia, Tipo, Importe) VALUES (2012,08,22,'Cargo',14.00)

INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2007,08,22,'Cargo',13.00)
INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2008,08,22,'Cargo',34.00)
INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2009,08,22,'Cargo',23.00)
INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2010,08,22,'Cargo',78.00)
INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2011,08,22,'Cargo',98.00)
INSERT INTO tblEstadosL (Ano, Mes, Dia, Tipo, Importe) VALUES (2012,08,22,'Cargo',14.00)

SELECT Ano, empresa.$Partition.pfAnualR(Ano) FROM tblEstadosR


SELECT Ano, empresa.$Partition.pfAnualL(Ano) FROM tblEstadosL

13
Base de Datos