Ir para conteúdo

POWERED BY:

Arquivado

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

hyperpixel

lentidao na consulta

Recommended Posts

pessoal estou tendo problema grave com uma consulta estou montando site php/mysql de busca mas a busca esta lenta quando tem retorno grande de registros nem tao grande 100/200 registros chega demorar ~ 30 segundo / 1 min, o que deixa totalmente inviável a utilização da mesma.

tenho cerca de 40 tabelas a de empresas com cerca de 3500 registros quero saber se vcs tem alguma ideia do que posso fazer p resolver. vou dar alguns dados do sis se alguem conseguir ajudar muito grato.

ja indexei as tabelas que tem relacionamento, elas tem pk n aparenta ter nehum erro grave

 

mer

 

vou mandar o mer do banco c precisar mando um esboço do banco

 

grato

 

pessoal esboço do banco,

 

 


-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Servidor: localhost
-- Tempo de Geração: Abr 13, 2010 as 07:29 PM
-- Versão do Servidor: 5.1.30
-- Versão do PHP: 5.2.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";

--
-- Banco de Dados: `bairraoreduzido`
--

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

--
-- Estrutura da tabela `anuncioxtitulos`
--

CREATE TABLE IF NOT EXISTS `anuncioxtitulos` (
  `idTabanuncioxtitulo` int(6) NOT NULL,
  `idAnuncio` int(6) NOT NULL,
  `item` int(6) NOT NULL,
  `tipoAnuncio` int(1) NOT NULL,
  `idTitulo` int(6) NOT NULL,
  `idCliente` int(6) NOT NULL,
  `DataCadastro` datetime NOT NULL,
  `ativo` int(11) NOT NULL,
  PRIMARY KEY (`idTabanuncioxtitulo`),
  KEY `idAnuncio` (`idAnuncio`),
  KEY `idTitulo` (`idTitulo`),
  KEY `idCliente` (`idCliente`),
  KEY `item` (`item`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Extraindo dados da tabela `anuncioxtitulos`
--

INSERT INTO `anuncioxtitulos` (`idTabanuncioxtitulo`, `idAnuncio`, `item`, `tipoAnuncio`, `idTitulo`, `idCliente`, `DataCadastro`, `ativo`) VALUES
(3, 3, 1, 1, 4, 3, '2010-04-13 00:00:00', 1),
(4, 4, 1, 1, 7, 4, '2010-04-13 00:00:00', 1),
(5, 5, 1, 1, 8, 5, '0000-00-00 00:00:00', 1),
(6, 6, 1, 1, 1, 6, '0000-00-00 00:00:00', 1),
(7, 7, 19, 1, 9, 1, '0000-00-00 00:00:00', 1),
(8, 8, 18, 1, 4, 2, '0000-00-00 00:00:00', 1),
(9, 9, 2, 1, 7, 3, '0000-00-00 00:00:00', 1),
(10, 10, 3, 1, 9, 4, '0000-00-00 00:00:00', 1),
(11, 11, 19, 1, 6, 5, '0000-00-00 00:00:00', 1),
(12, 12, 18, 1, 7, 6, '0000-00-00 00:00:00', 1),
(1, 1, 1, 1, 1, 1, '2010-04-13 00:00:00', 1),
(2, 2, 1, 1, 6, 2, '2010-04-13 00:00:00', 1);

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

--
-- Estrutura da tabela `empresas`
--

CREATE TABLE IF NOT EXISTS `empresas` (
  `idTabEmpresa` int(6) unsigned NOT NULL,
  `idcliente` int(6) unsigned zerofill NOT NULL,
  `NomeFantasia` varchar(100) DEFAULT NULL,
  `RazaoSocial` varchar(70) DEFAULT NULL,
  `dataCadastro` datetime NOT NULL,
  `Ativa` int(1) NOT NULL,
  `Descricao` text NOT NULL,
  `regiao` int(2) NOT NULL,
  `titulo1` int(4) NOT NULL,
  `titulo2` int(4) NOT NULL,
  `titulo3` int(4) NOT NULL,
  `titulo4` int(3) NOT NULL,
  `titulo5` int(3) NOT NULL,
  `cnpj` varchar(25) NOT NULL,
  `cpf` varchar(25) NOT NULL,
  `nomeResponsavel` varchar(70) NOT NULL,
  `cargoResponsavel` varchar(50) NOT NULL,
  `emailResponsavel` varchar(70) NOT NULL,
  `nomeResponsavel2` varchar(70) NOT NULL,
  `cargoResponsavel2` varchar(50) NOT NULL,
  `emailResponsavel2` varchar(70) NOT NULL,
  `nomeAtendente` varchar(70) NOT NULL,
  `CargoAtendete` varchar(50) NOT NULL,
  `emailPrincipal` varchar(70) NOT NULL,
  `site` varchar(70) NOT NULL,
  `telefone1` varchar(16) NOT NULL,
  `telefone2` varchar(16) NOT NULL,
  `telefone3` varchar(16) NOT NULL,
  `tipoLogradouro` varchar(16) NOT NULL,
  `logradouro` varchar(70) NOT NULL,
  `numero` varchar(6) NOT NULL,
  `complemento` varchar(25) NOT NULL,
  `bairro` varchar(50) NOT NULL,
  `cep` varchar(15) NOT NULL,
  `cidade` varchar(50) NOT NULL,
  `estado` text NOT NULL,
  `palavraschaves` varchar(120) NOT NULL,
  PRIMARY KEY (`idTabEmpresa`),
  KEY `idcliente` (`idcliente`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

--
-- Extraindo dados da tabela `empresas`
--

INSERT INTO `empresas` (`idTabEmpresa`, `idcliente`, `NomeFantasia`, `RazaoSocial`, `dataCadastro`, `Ativa`, `Descricao`, `regiao`, `titulo1`, `titulo2`, `titulo3`, `titulo4`, `titulo5`, `cnpj`, `cpf`, `nomeResponsavel`, `cargoResponsavel`, `emailResponsavel`, `nomeResponsavel2`, `cargoResponsavel2`, `emailResponsavel2`, `nomeAtendente`, `CargoAtendete`, `emailPrincipal`, `site`, `telefone1`, `telefone2`, `telefone3`, `tipoLogradouro`, `logradouro`, `numero`, `complemento`, `bairro`, `cep`, `cidade`, `estado`, `palavraschaves`) VALUES
(1, 000001, 'empresa1', 'Razao ', '2009-08-29 19:28:43', 1, '', 3, 5, 0, 0, 0, 0, '', '1111111110', 'Danielle', 'Gerente ou Responsavel', 'emailResponsa', 'Nessim', 'Gerente ou Responsavel', 'emailResponsavel', 'nomeAtendente', 'Gerente ou Responsavel', 'hy@gmail.com', 'www.site.com', '11-0000-6686', '22222222222222', '33333333333333', 'Avenida:', 'Major transporte', '1000', 'fundos', 'bairro', '', '', '', 'palavraschaves'),
(6, 000006, 'Brasil', 'Brasil', '2009-09-21 15:15:37', 1, 'fghfghgfhgfhgf', 2, 1, 9, 0, 0, 0, '', '', 'Luciana', 'Gerente ou Responsavel', '', '', '', '', '', '', 'luciana@site.com.br', 'www.site.com.br', '11-0000-6009', '11-0000-4622', '', '', 'Alameda:Rio  - cjs. 65 e 66', '1222', '', 'moema', '432432432', 'São Paulo', 'SP', ''),
(2, 000002, 'Condomínio Res.', 'Condomínio Res.', '2009-08-29 19:42:37', 1, ' x - desconsiderar porque eles não são anunciantes', 9, 4, 0, 0, 0, 0, '', '', 'Diretor de marketing', 'Nome / Cargo: Proprietrio ou responsvel', '', '', '', '', '', '', 'gfdgfdg@forte.com.br', 'www.18.com.br', '(11) 54353-6131', '', '', '', 'Pacífico Sul, 1000', '', '', '', '', 'São Paulo', 'SP', ''),
(3, 000003, 'Boulevard', 'Boulevard', '2009-08-29 19:42:37', 1, '', 1, 8, 0, 0, 0, 0, '', '', 'Maria', 'Nome / Cargo: Proprietrio ou responsvel', '', '', '', '', '', '', '21@igmail.com.br', '', '(11) 1233-1926', '', '', '', '', '', '', '', '', 'São Paulo', 'SP', ''),
(4, 000004, 'Barros', 'Barros', '2009-08-29 19:42:37', 1, '', 3, 6, 0, 0, 0, 0, '', '', 'Airton', 'Nome / Cargo: Proprietrio ou responsvel', '', '', '', '', '', '', 'a@hotmail.com', '', '(11) 5466-3796', '', '', '', 'Calçada, 114-2ºand.', '', '', '', '', 'São Paulo', 'SP', ''),
(5, 000005, 'Ups', 'Ups', '2009-08-29 19:42:37', 1, ' CURANDO FRONTEIRAS - ATRAVESSANDO OS OCEANOS EM TODO O MUNDO\r\nA UPS oferece entregas garantidas com hora definida e dia definido em todo o mundo, com base no destino da sua remessa. ', 3, 7, 0, 0, 0, 0, '', '', 'Ad', 'Nome / Cargo: Proprietrio ou responsvel', '', '', '', '', '', '', 'ab@jhgjs.com', 'www.jhgujhgjhgpfjhgjhg.com', '(11) 3211-4088', '', '', '', 'Calçada, 44', '', '', '', '', 'São Paulo', 'SP', '');

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

--
-- Estrutura da tabela `empresaxanuncio`
--

CREATE TABLE IF NOT EXISTS `empresaxanuncio` (
  `idanuncioxempresa` int(6) unsigned zerofill NOT NULL,
  `idempresa` int(6) unsigned NOT NULL,
  `idanuncio` int(6) unsigned NOT NULL,
  `dtCad` datetime NOT NULL,
  `ativo` int(1) NOT NULL,
  PRIMARY KEY (`idanuncioxempresa`,`idempresa`,`idanuncio`),
  KEY `idempresa` (`idempresa`),
  KEY `idanuncio` (`idanuncio`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED;

--
-- Extraindo dados da tabela `empresaxanuncio`
--

INSERT INTO `empresaxanuncio` (`idanuncioxempresa`, `idempresa`, `idanuncio`, `dtCad`, `ativo`) VALUES
(000002, 2, 1, '2009-10-07 15:22:47', 1),
(000003, 3, 1, '2009-10-07 15:22:47', 1),
(000004, 4, 1, '2009-10-07 15:22:47', 1),
(000005, 5, 1, '2009-10-07 15:22:47', 1),
(000006, 6, 1, '2009-10-07 15:22:47', 1),
(000007, 1, 19, '2009-10-07 15:22:47', 1),
(000008, 2, 18, '2009-10-07 15:22:47', 1),
(000009, 3, 2, '2009-10-07 15:22:47', 1),
(000010, 4, 3, '2009-10-07 15:22:47', 1),
(000011, 5, 19, '2009-10-07 15:22:47', 1),
(000012, 6, 18, '2009-10-07 15:22:47', 1);

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

--
-- Estrutura da tabela `nivel`
--

CREATE TABLE IF NOT EXISTS `nivel` (
  `idnivel` int(1) unsigned NOT NULL,
  `nivel` varchar(45) DEFAULT NULL,
  PRIMARY KEY (`idnivel`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Extraindo dados da tabela `nivel`
--

INSERT INTO `nivel` (`idnivel`, `nivel`) VALUES
(1, 'Empresa'),
(5, 'Usuarios'),
(2, 'Admin');

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

--
-- Estrutura da tabela `regiao`
--

CREATE TABLE IF NOT EXISTS `regiao` (
  `idregiao` int(6) unsigned NOT NULL,
  `regiao` varchar(60) DEFAULT NULL,
  `ativo` tinyint(1) NOT NULL,
  PRIMARY KEY (`idregiao`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

--
-- Extraindo dados da tabela `regiao`
--

INSERT INTO `regiao` (`idregiao`, `regiao`, `ativo`) VALUES
(1, 'regiao1', 1),
(2, 'regiao2', 1),
(3, 'regiao3', 1),
(4, 'regiao4', 1),
(5, 'regiao5', 1),
(6, 'regiao6', 1),
(7, 'regiao7', 1),
(8, 'regiao8', 1),
(9, 'regiao9', 1),
(10, 'regiao10', 1),
(0, 'regiao0', 1);

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

--
-- Estrutura da tabela `tb_master`
--

CREATE TABLE IF NOT EXISTS `tb_master` (
  `idCliente` int(6) unsigned NOT NULL,
  `login` varchar(60) DEFAULT NULL,
  `senha` varchar(25) NOT NULL,
  `nivel` int(1) NOT NULL,
  `ativo` int(1) NOT NULL,
  PRIMARY KEY (`idCliente`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Extraindo dados da tabela `tb_master`
--

INSERT INTO `tb_master` (`idCliente`, `login`, `senha`, `nivel`, `ativo`) VALUES
(1, 'empresa1', '1', 2, 1),
(5, 'empresa5', 'y3lh0j', 3, 1),
(6, 'empresa6', 'qugvzl', 3, 1),
(4, 'empresa4', 'yq2nsx', 2, 1),
(3, 'empresa3', '1', 2, 1),
(2, 'empresa2', '903igy', 2, 1);

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

--
-- Estrutura da tabela `tipoanuncio`
--

CREATE TABLE IF NOT EXISTS `tipoanuncio` (
  `idtipoAnuncio` int(6) NOT NULL,
  `sub` int(5) NOT NULL,
  `tipo` varchar(45) NOT NULL,
  `Validade` date NOT NULL,
  `configuracao` text NOT NULL,
  `valor` float(10,2) NOT NULL,
  `pagina` varchar(45) NOT NULL,
  `descricao` text NOT NULL,
  `ativo` int(1) NOT NULL,
  PRIMARY KEY (`idtipoAnuncio`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Extraindo dados da tabela `tipoanuncio`
--

INSERT INTO `tipoanuncio` (`idtipoAnuncio`, `sub`, `tipo`, `Validade`, `configuracao`, `valor`, `pagina`, `descricao`, `ativo`) VALUES
(1, 1, 'FREE', '0000-01-00', '', 0.00, 'Titulos', '1 linha', 1),
(2, 2, 'JUNIOR', '0000-06-00', '', 0.00, 'Titulos', 'Anuncio ', 1),
(3, 3, 'GOLD', '0000-06-00', '', 0.00, 'Titulo', 'Anuncio ', 1),
(4, 4, 'MASTER ', '0000-06-00', '', 0.00, 'Titulos', 'Anúncio', 1);

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

--
-- Estrutura da tabela `titulo`
--

CREATE TABLE IF NOT EXISTS `titulo` (
  `idtitulo` int(6) unsigned NOT NULL,
  `titulo` varchar(160) DEFAULT NULL,
  `ativo` tinyint(1) NOT NULL,
  PRIMARY KEY (`idtitulo`),
  UNIQUE KEY `idtitulo` (`idtitulo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT;

--
-- Extraindo dados da tabela `titulo`
--

INSERT INTO `titulo` (`idtitulo`, `titulo`, `ativo`) VALUES
(1, 'Academias, Dança, Esportes E Ginástica', 1),
(2, 'Açougues', 1),
(3, 'Acumuladores E Baterias Estacionárias', 1),
(4, 'Acupuntura', 1),
(5, 'Adestramento Para Cães', 1),
(6, 'Advocacia', 1),
(7, 'Aeromodelismo', 1),
(8, 'Agências De Cobrança', 1),
(9, 'Agências De Empregos E Recursos Humanos', 1),
(10, 'Agências De Modelos', 1),
(0, ' Excluir Titulo', 1);



e essa a consulta q n da certo

SELECT DISTINCT 
empresas.idcliente
FROM `empresas` 
INNER JOIN regiao 
ON regiao.idregiao = empresas.regiao
INNER JOIN empresaxanuncio 
ON empresaxanuncio.idempresa = empresas.idcliente
AND (empresaxanuncio.idanuncio = '3'
OR (empresaxanuncio.idanuncio = '4'))
INNER JOIN titulo 
ON empresas.titulo1 = titulo.idtitulo
OR empresas.titulo2 = titulo.idtitulo
WHERE 
empresas.NomeFantasia LIKE '%valordabusca%'
OR empresas.Descricao LIKE '%valordabusca%'
OR empresas.RazaoSocial LIKE '%valordabusca%'
OR empresas.palavraschaves LIKE '%valordabusca%'
OR regiao.regiao LIKE '%valordabusca%'
OR empresas.tipoLogradouro LIKE '%valordabusca%'
OR empresas.logradouro LIKE '%valordabusca%'
OR empresas.emailPrincipal LIKE '%valordabusca%'
OR empresas.telefone1 LIKE '%valordabusca%'
OR titulo.titulo LIKE '%valordabusca%'
AND (empresaxanuncio.ativo = '1')
ORDER BY empresas.NomeFantasia ASC
LIMIT 0 , 50 

com esa consulta eu tenho um valor que desses valores eu montarei o anuncio da tal empresa então o processo se da em 2 partes 1 busca no banco a palavra digitada encontrado tenho que ver o tipo do anuncio da empresa e monta-lo depois

este trecho monta o anuncio


SELECT
			DISTINCT
			empresas.idcliente,
			empresas.NomeFantasia, 
			empresas.Descricao,
			empresaxanuncio.idempresa,
			regiao.regiao, 
			empresas.tipoLogradouro, 
			empresas.logradouro, 			
			empresas.numero, 
			empresas.telefone1,
			empresas.emailPrincipal,
			empresas.complemento,
			empresas.emailResponsavel,
			empresas.emailResponsavel2,
			empresas.site,
			titulo.idtitulo, 
			titulo.titulo
			FROM
			empresaxanuncio 
			INNER JOIN
			anuncioxtitulos
			on empresaxanuncio.idanuncioxempresa = anuncioxtitulos.idAnuncio			
			INNER JOIN
			titulo
			ON titulo.idtitulo = anuncioxtitulos.idTitulo
			INNER JOIN
			empresas
			ON empresas.idcliente = 'idcliente'
			INNER JOIN
			regiao
			ON regiao.idregiao = empresas.regiao
			WHERE
			anuncioxtitulos.idCliente = 'idcliente'
			AND
			(empresaxanuncio.ativo = '1')

 

 

 

se alguem tiver alguma idéia d como estruturar isso corretamente.

 

grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Movi este tópico mantendo o link por achar que será melhor respondido aqui no MySql.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nao sei o q você quer exatamente com aquele select, mas eh grande a chance dele estar errado, alem disso você precisa de index em todos os pontos de juncao e nos where

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual deles o primeiro ou o segundo lógica é a seguinte o primeiro eui procuro a palavra digitada e qual o tipo ed anuncio isso me gera um resultado me trás um conjunto de id's (idcliente) com esse conjunto eu faço outra consulta para montar o anuncio em si e apresenta-lo na busca.

 

o phpmyadmin mostrou o tempo das consultas no banco com 3500 registros em torno de 2 / 3 segundos, creio que este já seja um problema será que é a modelagem errada ou a consulta?

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.