Indice Parcial no Postgresql

Standard

Segue abaixo um exemplo de como trabalhar com índices parciais no postgresql, para saber mais sobre o assunto clique no link que segue:

http://pgdocptbr.sourceforge.net/pg80/indexes-partial.html

EXEMPLO:

-- Criar Table: contato

CREATE TABLE contato
(
id bigserial NOT NULL,
datanascimento date,
email character varying(255),
nome character varying(255),
CONSTRAINT contato_pkey PRIMARY KEY (id),
CONSTRAINT contato_email_key UNIQUE (email)
)
WITH (
OIDS=FALSE
);
ALTER TABLE contato OWNER TO postgres;

-- Criando indice parcial (só valida a unicidade do campo e-mail se o mesmo for diferente de null)
CREATE INDEX email_ix ON contato (email)
WHERE email IS NOT NULL;

-- O Comando abaixo pode ser executada várias vezes sem gerar erro 
INSERT INTO contato (datanascimento,email,nome) values (now(),null,'nome')

-- O Comando abaixo gera o seguinte erro quando executado mais de uma vez:
-- ERRO:  duplicar valor da chave viola a restrição de unicidade "contato_email_key"
INSERT INTO contato (datanascimento,email,nome) values (now(),'teste@teste.com.br','nome')

-- Ver resultado
SELECT * FROM contato

1 2010-12-15 null nome
2 2010-12-15 null nome
3 2010-12-15 teste@teste.com.br nome

Exemplo de Criação de Indice filtrado no Sql Server 2008

Standard
--CRIANDO TABELA PARA TESTAR O INDICE FILTRADO
CREATE TABLE TXY(ID INT IDENTITY(1,1) PRIMARY KEY, NOME VARCHAR(10), CPF VARCHAR(11))
GO
--CRIANDO O INDICE UNIQUE FILTRADO
CREATE UNIQUE NONCLUSTERED INDEX IDX_TXY_CPF 
	ON TXY(CPF) 
		WHERE CPF IS NOT NULL
GO
----------------------------------------------------------------------
--INSERINDO DADOS DE NOME E CPF
INSERT INTO TXY VALUES('JOAO','11111111111'),('MARIA','22222222222')
--RESULT SET: (2 row(s) affected)
----------------------------------------------------------------------
--INSERINDO DADOS DE NOME, PORÉM COM CPF NULL
INSERT INTO TXY VALUES('JOSE',NULL),('MARIANA',NULL)
--RESULT SET: (2 row(s) affected)
----------------------------------------------------------------------
--INSERINDO DADOS DE NOME E CPF FORÇANDO A DUPLICAÇÃO DOS DOIS PRIMEIROS REGISTROS INSERIDOS
--PARA TESTAR O ÍNDICE UNIQUE FILTRADO.
INSERT INTO TXY VALUES('JOAO','11111111111'),('MARIA','22222222222')
--RESULT SET: 
/*
Msg 2601, Level 14, State 1, Line 1
Cannot insert duplicate key row in object 'dbo.TXY' with unique index 'IDX_TXY_CPF'. The duplicate key value is (11111111111).
The statement has been terminated.
*/
----------------------------------------------------------------------
--DUPLICANDO OS REGISTROS COM CPF NULL
INSERT INTO TXY VALUES('JOSE',NULL),('MARIANA',NULL)
--RESULT SET: (2 row(s) affected)
----------------------------------------------------------------------
--VERIFICANDO OS REGISTROS NA TABELA
SELECT * FROM TXY

Link do Books OnLine sobre o Índice Filtrado: 

 msdn.microsoft.com/pt-br/library/cc280372.aspx