Ir para conteúdo

POWERED BY:

Arquivado

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

ursolouco

Otimizar

Recommended Posts

Salve,

 

Há como otimizar ou deixar mais agil esta consulta ?

 

SELECT					clientes.cliente_parceiro_id,					clientes.cliente_email,					clientes.cliente_senha,					clientes.cliente_nome,					clientes.cliente_sobrenome,					login.login_usuario,					login.login_senha,					login.login_user_code					FROM					clientes				LEFT JOIN					login				ON					login.login_cliente_id = clientes.cliente_id				WHERE					clientes.cliente_email LIKE '%$palavra%' 				AND 					clientes.cliente_parceiro_id = '$pid' 				AND 					NOT ISNULL(login.login_usuario)				OR						clientes.cliente_nome LIKE '%$palavra%' 				AND 					clientes.cliente_parceiro_id = '$pid' 				AND 					NOT ISNULL(login.login_usuario)				OR						clientes.cliente_sobrenome LIKE '%$palavra%' 				AND 					clientes.cliente_parceiro_id = '$pid' 				AND 					NOT ISNULL(login.login_usuario)				OR					login.login_usuario LIKE '%$palavra%' 				AND 					clientes.cliente_parceiro_id = '$pid' 				AND 					NOT ISNULL(login.login_usuario)				OR						login.login_senha LIKE '%$palavra%' 				AND 					clientes.cliente_parceiro_id = '$pid' 				AND 					NOT ISNULL(login.login_usuario)				OR						login.login_user_code LIKE '%$palavra%' 				AND 					clientes.cliente_parceiro_id = '$pid' 				AND 					NOT ISNULL(login.login_usuario)									GROUP BY					clientes.cliente_id				ORDER BY 					clientes.cliente_nome 				ASC;

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nessa tabela há índices? Mostre a saída de um EXPLAIN desta query para nós.

Salve,Vamos lá! Espero que apareça formatado aqui no fórum:Tabela login:
mysql> explain login;+-------------------+-----------------------+------+-----+---------+----------------+| Field			 | Type				  | Null | Key | Default | Extra		  |+-------------------+-----------------------+------+-----+---------+----------------+| login_id		  | smallint(11) unsigned |	  | PRI | NULL	| auto_increment || login_usuario	 | varchar(100)		  | YES  |	 | NULL	|				|| login_senha	   | varchar(100)		  | YES  |	 | NULL	|				|| login_cliente_id  | smallint(11) unsigned | YES  |	 | NULL	|				|| login_agente_id   | smallint(11) unsigned | YES  |	 | NULL	|				|| login_parceiro_id | smallint(11) unsigned | YES  |	 | NULL	|				|| login_pedido_id   | smallint(11) unsigned | YES  |	 | NULL	|				|| login_user_code   | varchar(50)		   | YES  |	 | NULL	|				|+-------------------+-----------------------+------+-----+---------+----------------+8 rows in set (0.00 sec)
Tabela clientes:
mysql> explain clientes;+-------------------------+-----------------------+------+-----+---------+----------------+| Field				   | Type				  | Null | Key | Default | Extra		  |+-------------------------+-----------------------+------+-----+---------+----------------+| cliente_id			  | smallint(11) unsigned |	  | PRI | NULL	| auto_increment || cliente_parceiro_id	 | smallint(11) unsigned |	  | MUL | 0	   |				|| cliente_tipo_id		 | smallint(11) unsigned |	  | MUL | 0	   |				|| cliente_nome			| varchar(100)		  | YES  |	 | NULL	|				|| cliente_sobrenome	   | varchar(100)		  | YES  |	 | NULL	|				|| cliente_rg			  | varchar(20)		   | YES  |	 | NULL	|				|| cliente_cpf_cnpj		| varchar(20)		   | YES  | MUL | NULL	|				|| cliente_endereco		| varchar(255)		  | YES  |	 | NULL	|				|| cliente_endereco_numero | smallint(5) unsigned  | YES  |	 | NULL	|				|| cliente_complemento	 | varchar(255)		  | YES  |	 | NULL	|				|| cliente_bairro		  | varchar(255)		  | YES  |	 | NULL	|				|| cliente_cep			 | varchar(20)		   | YES  |	 | NULL	|				|| cliente_cidade		  | varchar(255)		  | YES  |	 | NULL	|				|| cliente_estado_id	   | smallint(11) unsigned | YES  |	 | NULL	|				|| cliente_email		   | varchar(255)		  | YES  |	 | NULL	|				|| cliente_senha		   | varchar(255)		  | YES  |	 | NULL	|				|| cliente_telefone		| varchar(20)		   | YES  |	 | NULL	|				|| cliente_celular		 | varchar(20)		   | YES  |	 | NULL	|				|| cliente_comercial	   | varchar(20)		   | YES  |	 | NULL	|				|| cliente_fax			 | varchar(20)		   | YES  |	 | NULL	|				|| cliente_agente_id	   | smallint(11) unsigned | YES  |	 | NULL	|				|| cliente_email_opcional  | varchar(255)		  | YES  |	 | NULL	|				|| cliente_hash			| varchar(255)		  | YES  |	 | NULL	|				|+-------------------------+-----------------------+------+-----+---------+----------------+23 rows in set (0.06 sec)
Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa,

 

O EXPLAIN que pedimos para analisar sua consulta não é uma explanação da tabela e sim um EXPLAIN <query>...assim poderemos ver qual é o posicionamento do SGBD que ele recebe sua query, se ele está fazendo FULL-SCAN ou utilizando algum índice.

 

Abração!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa,

 

O EXPLAIN que pedimos para analisar sua consulta não é uma explanação da tabela e sim um EXPLAIN <query>...assim poderemos ver qual é o posicionamento do SGBD que ele recebe sua query, se ele está fazendo FULL-SCAN ou utilizando algum índice.

 

Abração!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Salve,

 

http://forum.imasters.com.br/public/style_emoticons/default/upset.gif Desculpe-me pela cabaçada!

 

Seria isso aqui o que o Eclesiastes pediu ?

 

+----+-------------+----------+------+-------------------+-------------------+---------+-------+------+----------------------------------------------+| id | select_type | table	| type | possible_keys	 | key			   | key_len | ref   | rows | Extra										|+----+-------------+----------+------+-------------------+-------------------+---------+-------+------+----------------------------------------------+|  1 | SIMPLE	  | clientes | ref  | clientes_FKIndex4 | clientes_FKIndex4 |	   2 | const |	2 | Using where; Using temporary; Using filesort ||  1 | SIMPLE	  | login	| ALL  | NULL			  | NULL			  |	NULL | NULL  |   66 | Using where								  |+----+-------------+----------+------+-------------------+-------------------+---------+-------+------+----------------------------------------------+2 rows in set (0.05 sec)
Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ao meu ver, você trocando LEFT para INNER você poderia remover os 'NOT ISNULL(...)' das condições que daria no mesmo.Para a questão de índice fica complicado, já que você usa o LIKE com prefixo variável.

Compartilhar este post


Link para o post
Compartilhar em outros sites

é o que eu esperava mesmo. . .juntando o que o Eclesiastes já postou com o resultado do EXPLIAN da sua conulta, confirmamos que nenhum índice de sua tabela está sendo usado, está sendo feito um FULL SCAN na tabela...sendo assim, somente depois de ler toda a tabela, o conjunto de dados e filtrado e entregue à saída padrão.

 

Ficou complicado ajudar pois estamos fora do ambiente e não sabemos como está memória, índices...

 

Deus abençõe!! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.