Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

neotheone

Qual a consulta mais rápida?

Recommended Posts

Gostaria de saber qual consulta seria mais rapida:

 

Exemplo:

 

Imaginem 3 tabelas no banco: tabela_Pais, tabela_Estados, tabela_Clientes

 

tabela_Pais

id_pais - pais

1 - Brasil

2 - Estados Unidos

3 - Inglaterra

------------------------------------------------------------

tabela_Estados

id_estado - estado

1 - Rio de Janeiro

2 - Florida

3 - Londres

------------------------------------------------------------

tabela_Clientes

id_cliente - nome - endereco - telefone - estado - pais

1 - Felipe - endereco x - telefone - 1 - 1

-----------------------------------------------------------

tabela_Clientes2

id_cliente - nome - endereco - telefone - estado - pais

1 - Felipe - endereco x - telefone - brasil - rio de janeiro

 

 

Como vocês podem notar eu gravo o id de estado e o id pais na minha tabela clientes. Quando eu for dar um select

na tabela cliente eu terei que dar pelo menos 2 left join na tabela PAIS e na tabela ESTADOS concordam comigo? pois

terei que trazer o nome do pais e o nome do estado.

 

Eu poderia também gravar na tabela o nome logo do pais e do estado, aí ele nao precisaria dar left join nas outras

tabelas pra trazer o nome.

 

Entao minha pergunta seria, qual das 2 consultas retornaria o resultado mais rapido? E em questao de modelagem qual

é a forma mais correta de se fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

em bd 2 coisas influenciam para definir o que é melhor para se usar: custo e velocidade.

 

o mais rápido, com certeza, será utilizar a informacao direta em uma unica tabela armazenando o nome. O custo também é menor, pois nao será necessário fazer um JOIN para obter a informacao. O problema de usar esse tipo de armazenamento, é a questao da normalizacao dos dados (a modelagem que você cita).

 

O problema da normalizacao é justamento o custo que isso dá ao banco na hora de retornar um valor. Mas atualmente, um custo maior é muito mais facil contornar (atraves de otimizacoes e melhorias do engine do BD e de HW do server) do que se deparar com problemas posteriores que possam ocorrem com atualizacoes de dados nao normalizados ou até mesmo resgatar uma informacao.

 

No seu caso, as tabelas sao pequenas (cidade, pais, estado). Otimizacoes de indices e estatísticas atualizadas para ajudar no plano de execucao já melhoriam a velocidade do JOIN e diminuiria o custo, tornando a opcao aceitavel, e a olho nú, praticamente igual em velocidade.

 

Existem casos raros, em um ambiente OLTP, que se desnormaliza a informacao, porém, pelo que vi, no seu caso 100% de chance de não ser um deles. Uma dica: mantenha normalizado (com códigos na tabelas principal)

 

Abs

SkA

Compartilhar este post


Link para o post
Compartilhar em outros sites

No seu caso, as tabelas sao pequenas (cidade, pais, estado)

justamente, essas são tabelas pequenas e não interferem quase na performance da consulta.

E é bem mais prático ter essas tabelas em separado, pois pode ser que precise desses dados para fazer relação com alguma outra tabela, como tu disse que está usando a tabela CLIENTE2.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A pessoa que inventou a 'modelagem' se esquece do fato de q nao eh necessario uma bazuca pra matar uma formiga.

Compartilhar este post


Link para o post
Compartilhar em outros sites

se está lidando com varios países é melhor separar a tabela de estados

 

brazil_provincies

usa_provincies

mexico_provincies

etc...

Compartilhar este post


Link para o post
Compartilhar em outros sites

se está lidando com varios países é melhor separar a tabela de estados

 

brazil_provincies

usa_provincies

mexico_provincies

etc...

Qual seria a vantagem de criar varias tabelas semelhantes ? Um pouco de performance... mas se forem todos os paises seram quantas tabelas? cada uma com poucos registros...

Compartilhar este post


Link para o post
Compartilhar em outros sites

na verdade nao precisa de banco de dados

 

particularmente faço em arquivos

 

exemlpos:

 

paises.php

 

<?php

	function country( $n = '' ){

		$x[0]	= "Afghanistan";
		$x[1]	= "Albania";
		$x[2]	= "Algeria";
		$x[3]	= "American Samoa";
		$x[4]	= "Andorra";
		$x[5]	= "Angola";
		$x[6]	= "Anguilla";
		$x[7]	= "Antigua and Barbuda";
		$x[8]	= "Argentina";
		$x[9]	= "Armenia";
		$x[10]   = "Aruba";
		$x[11]   = "Ascension Island";

...

 

 

 

idiomas

 

/*
	1 - ASIA
	2 - AFRICA
	3 - OCEANIA
	4 - EUROPA
	5 - NORTH AMERICA (CARIBE)
	6 - CENTRAL AMERICA
	7 - NORTH AMERICA
	8 - OCEAN ATLANTIC
	9 - SOUTH AMERICA
	*/
	function languages( $n = '' ){
	
		$x[0]	= "Pashtu, Afghan Persian, local dialects"; //Afghanistan (1)
		$x[1]	= "Albanian, Greek"; //Albania (4)
		$x[2]	= "Arabic, French and other dialects"; //Algeria (2)
		$x[3]	= "Samoan, English"; //American Samoa (3)
		$x[4]	= "Catalan, French"; //Andorra (4)
		$x[5]	= "Portuguese, Bantu and varied African dialects"; //Angola (2)
		$x[6]	= "English"; //Anguilla (5)
		$x[7]	= "English, local dialects"; //Antigua and Barbuda (5)
		$x[8]	= "Spanish, English, Italian, German, French"; //Argentina (9)
		$x[9]	= "Armenian, Russian"; //Armenia (4)

...

 

 

provincies_japan

 

function regionsProvinces( $n = '' ){
		$rs = array(
		 1  => array(1  => '北海道')
		,2  => array(2  => '青森県'
				   , 3  => '岩手県'
				   , 4  => '宮城県'
				   , 5  => '秋田県'
				   , 6  => '山形県'
				   , 7  => '福島県')
		,3  => array(8  => '茨城県'
				   , 9  => '栃木県'
				   , 10 => '群馬県')
		,4  => array(11 => '埼玉県'
				   , 12 => '千葉県'
				   , 13 => '東京都'
				   , 14 => '神奈川県')
		,5  => array(19 => '山梨県'

 

 

países relativamente grande são divididos em regiões e províncias "estados"

 

outros países pequenos nao possuem estados, apenas regiões, outros possuem estados e nao possuem regiões..

outros nao tem nada..

 

por isso é melhor separar.

 

lista completa de países e idiomas

www.worldatlas.com

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.