Ir para conteúdo
Fórum Script Brasil

t0th

Membros
  • Total de itens

    16
  • Registro em

  • Última visita

Tudo que t0th postou

  1. t0th

    Produtos com nomes similares

    Olá, mas acho que isso não resolve meu problema... obrigado
  2. Olá, tenho que seguinte situação, temos um comparador de preços, os produtos vem de lojas. Um produto pode vir com nomes diferentes. Exemplo: Notebook apple macbook 15 , esse produto pode vir das lojas com nomes diferentes: NB apple mac-book 15 notebook apple macbook 15 apple notebook mac-book 15 ...assim por diante... podendo ter variações dos nomes entre lojas diferentes. Pergunto: como posso fazer isso? Quando procurar por exemplo: Notebook apple macbook 15 ele mostrar 'esse produto esta em 5 lojas diferentes'. Ele teria que procurar semelhanças entre os nomes dos produtos e eleger quais são os semelhantes. Como posso fazer isso sem que seja um trabalho manual? Att.
  3. t0th

    Otimização tabela

    olá, se tiver alguém que pode me ajudar com esse problema eu pago pelo trabalho... só me mandar uma MP obrigado e espero resposata
  4. t0th

    Otimização tabela

    Olá, modifiquei algumas coisas: CREATE TABLE IF NOT EXISTS `produtos` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `lojas_id` int(10) unsigned NOT NULL DEFAULT '0', `nome` varchar(60) DEFAULT NULL, `codigo` varchar(15) DEFAULT NULL, `preço` varchar(10) DEFAULT NULL, `descc` text, `foto` varchar(200) DEFAULT NULL, `lastUpdate` varchar(22) NOT NULL, PRIMARY KEY (`id`), KEY `prod_nome2` (`nome`), FULLTEXT KEY `prod_nome` (`nome`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=96227 ; essa query: ---------------------- SELECT sql_cache produtos.nome,produtos.preço,lojas.nome as nomeLoja, site, produtos.id FROM produtos inner join lojas on lojas.id = produtos.lojas_id where (LOCATE('hd', produtos.nome) or MATCH (produtos.nome) AGAINST (' "HD EXT" "HD IDE" "HD SATA" "HD SCSI" "HD EXTERNO" "NB HD" "HARD DISK" "HD * P/ NOTEBOO" "HD 160" "HD 1.5TB " "HD 250" "HD 320" "HD 400 " "HD 500" "HD 640" "HD 750" "HD 80" "HD EXT " "HD EXTERNO" "HD IDE" "HD NB" "HD NTB" "HD SATA" "HD SCSI" "HD SSD" "HD USB" "HD-NB" "HD-NOTEBOOK" "NTB HD" ' IN BOOLEAN MODE)) and lojas.publish=1 ORDER BY produtos.nome ----------------------- mesma que: SELECT sql_cache produtos.nome,produtos.preço,lojas.nome as nomeLoja, site, produtos.id FROM produtos inner join lojas on lojas.id = produtos.lojas_id where ( produtos.nome LIKE '%hd%' or produtos.nome LIKE '%HD EXT%' or produtos.nome LIKE '%HD IDE%' or produtos.nome LIKE '%HD SATA%' or produtos.nome LIKE '%HD SCSI%' or produtos.nome LIKE '%HD EXTERNO%' or produtos.nome LIKE '%NB HD%' or produtos.nome LIKE '%HARD DISK%' or produtos.nome LIKE '%HD * P/ NOTEBOO%' or produtos.nome LIKE '%HD 160%' or produtos.nome LIKE '%HD 1.5TB %' or produtos.nome LIKE '%HD 250%' or produtos.nome LIKE '%HD 320%' or produtos.nome LIKE '%HD 400 %' or produtos.nome LIKE '%HD 500%' or produtos.nome LIKE '%HD 640%' or produtos.nome LIKE '%HD 750%' or produtos.nome LIKE '%HD 80%' or produtos.nome LIKE '%HD EXT %' or produtos.nome LIKE '%HD EXTERNO%' or produtos.nome LIKE '%HD IDE%' or produtos.nome LIKE '%HD NB%' or produtos.nome LIKE '%HD NTB%' or produtos.nome LIKE '%HD SATA%' or produtos.nome LIKE '%HD SCSI%' or produtos.nome LIKE '%HD SSD%' or produtos.nome LIKE '%HD USB%' or produtos.nome LIKE '%HD-NB%' or produtos.nome LIKE '%HD-NOTEBOOK%' or produtos.nome LIKE '%NTB HD%') and lojas.publish=1 order by produtos.nome fiz um explain nas duas queries e dá o seguinte: *************************** 1. row *************************** id: 1 select_type: SIMPLE table: produtos type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 42080 Extra: Using where; Using filesort *************************** 2. row *************************** id: 1 select_type: SIMPLE table: lojas type: eq_ref possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: lojasnoparagua.produtos.lojas_id rows: 1 Extra: Using where alguém pode me dizer se essas queries estão usando o índice? no phpMyAdmin a cardinalidade: prod_nome2 INDEX 42080 prod_nome FULLTEXT 1 muito obrigado e desde já agaredeço
  5. t0th

    Otimização tabela

    alguma sugestão, galerA? obrigado
  6. t0th

    Otimização tabela

    Olá, Denis, agradeço suas respostas rápidas... VALE LEMBRAR QUE A query com o LOCATE retorna o resultado desejado: MUITO OBRIGADO! executei o comando acima com EXPLAIN e retornou: consulta SQL: explain SELECT straight_join SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos force INDEX ( prod_nome ) INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE ( ( MATCH ( produtos.nome ) AGAINST ( '+notebook' IN BOOLEAN MODE ) ) OR LOCATE( 'nb', produtos.nome ) <>0 ) AND lojas.publish =1 order by produtos.nome asc \G; *************************** 1. row *************************** id: 1 select_type: SIMPLE table: produtos type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 36535 Extra: Using where; Using filesort *************************** 2. row *************************** id: 1 select_type: SIMPLE table: lojas type: eq_ref possible_keys: PRIMARY key: PRIMARY key_len: 4 ref: lojasnoparagua.produtos.lojas_id rows: 1 Extra: Using where 2 rows in set (0.00 sec) ainda me parce que não usou o índice INDEX prod_nome nem o FULLTEXT para sua pergunta, não.. não há índice para lojas.publish , vale lembrar que esse valor é sempre 0 ou 1 muito obrigado
  7. t0th

    Otimização tabela

    deixei os dois indices rodei a primeira query e tive o seguinte resultado: consulta SQL: EXPLAIN SELECT SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE (MATCH (produtos.nome) AGAINST ( '+notebook' IN BOOLEAN MODE)) OR LOCATE('nb', produtos.nome) AND lojas.publish =1; Registros: 2 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE produtos ALL NULL NULL NULL NULL 36453 Using where 1 SIMPLE lojas eq_ref PRIMARY PRIMARY 4 lojasnoparagua.produtos.lojas_id 1 Using where está usando o índice? pra mim parece que não.. testei a outra query e fica: consulta SQL: EXPLAIN SELECT SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos USE INDEX (prod_nome) INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE (MATCH (produtos.nome) AGAINST ('+notebook' IN BOOLEAN MODE)) OR LOCATE('nb', produtos.nome) AND lojas.publish =1; Registros: 2 id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE produtos ALL NULL NULL NULL NULL 36453 Using where 1 SIMPLE lojas eq_ref PRIMARY PRIMARY 4 lojasnoparagua.produtos.lojas_id 1 Using where não sei se esta usando index aqui.. obrigado e espero resposta
  8. t0th

    Otimização tabela

    olá, obrigado pela resposta removo o indice fulltext do nome antes? obrigado
  9. t0th

    Otimização tabela

    olá, obrigado pela resposta mudei o parenteses de lugar pra usar certo o concat SELECT SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE MATCH (produtos.nome) AGAINST (CONCAT( '+notebook', " ", '+nb ' ) IN BOOLEAN MODE) AND lojas.publish =1 o resultado é o mesmo que a query que te passei antes mas o problema é que ele não está pegando os registro com 'nb ' só os 'notebook' lendo em http://dev.mysql.com/doc/refman/4.1/pt/ful...ine-tuning.html meu servidor ta setado 'ft_min_word_len=3' minimo 3 carecteres.. estranho que tem espaço ali após o 'nb' => 'nb ' não tenho acesso as configurações do servidor pra mudar o valor de ft_min_word para 2 e meu host me disse que não poderia! alguma sugestão? muito obrigado
  10. t0th

    Otimização tabela

    Olá, SELECT sql_cache produtos.nome,produtos.preço,lojas.nome as nomeLoja, site, produtos.id FROM produtos inner join lojas on lojas.id = produtos.lojas_id WHERE ( MATCH (produtos.nome) AGAINST ('+notebook' IN BOOLEAN MODE) or MATCH (produtos.nome) AGAINST ('+nb ' IN BOOLEAN MODE)) and lojas.publish=1 só retorna os registro com notebook não retorna os 'nb ' alguém sabe o que pode ser? obrigado
  11. t0th

    Otimização tabela

    olá, obrigado pela resposta.. dei uma estudada e cheguei a essa 'conversão' a query: SELECT sql_cache produtos.nome,produtos.precco,lojas.nome as nomeLoja, site, produtos.id FROM produtos inner join lojas on lojas.id = produtos.lojas_id where ( produtos.nome LIKE '%processador%' or produtos.nome LIKE '%cpu%') and produtos.nome LIKE '%intel%' and lojas.publish=1 para: SELECT produtos.nome, produtos.precco, lojas.nome AS nomeLoja, site, produtos.id FROM produtos INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE (MATCH (produtos.nome) AGAINST ('+processador' IN BOOLEAN MODE) or MATCH (produtos.nome) AGAINST ('+cpu' IN BOOLEAN MODE) ) and MATCH (produtos.nome) AGAINST ('+intel' IN BOOLEAN MODE) AND lojas.publish =1 ta certo isso ou tem alguma maneira para melhorar? obrigado
  12. t0th

    Otimização tabela

    valeu, Denis.. mas como ficaria a query sem os LIKE? obrigadão
  13. t0th

    Otimização tabela

    olá, modifiquei todas as tabelas para MyISAM pode me sugerir quais campos para indice FULLTEXT? obrigado
  14. t0th

    Otimização tabela

    ola, os indices são: Nome chave Tipo Campo PRIMARY PRIMARY 37826 id lojas_id INDEX 37 lojas_id codigo INDEX 37826 codigo tipo da tabela produtos: InnoDB não posso retirar o LIKE, pois ai acabaria com a minha pesquisa.. para trocar para MyISAM teria que trocar as tabelas pai para MyISAM, certo? não acabaria com minhas chaves extrangeiras? quais campos posso criar indice FULLTEXT? nome? obrigado
  15. t0th

    Otimização tabela

    Olá, tenho a seguinte tabela: CREATE TABLE IF NOT EXISTS `produtos` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `lojas_id` int(10) unsigned NOT NULL DEFAULT '0', `nome` varchar(60) DEFAULT NULL, `codigo` varchar(15) DEFAULT NULL, `preço` varchar(10) DEFAULT NULL, `descc` text, `foto` varchar(200) DEFAULT NULL, `lastUpdate` varchar(22) NOT NULL, PRIMARY KEY (`id`), KEY `lojas_id` (`lojas_id`), KEY `codigo` (`codigo`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=62123; -- -- Restrições para a tabela `produtos` -- ALTER TABLE `produtos` ADD CONSTRAINT `produtos_ibfk_1` FOREIGN KEY (`lojas_id`) REFERENCES `lojas` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; tenho essa query: SELECT SQL_CACHE produtos.nome, produtos.preço, lojas.nome AS nomeLoja, site, produtos.id FROM produtos INNER JOIN lojas ON lojas.id = produtos.lojas_id WHERE ( produtos.nome LIKE '%Estabilizador%' OR produtos.nome LIKE '%ESTAB.%' OR produtos.nome LIKE '%ESTAB%' ) AND produtos.nome LIKE '%1000%' AND produtos.nome LIKE '%110%' AND lojas.publish =1 ORDER BY produtos.nome ASC LIMIT 0 , 100 tenho 35 mil registro... e tem horas que a query(essa query em cima depende do que o usuário digita) demora uns 10 segundos pra retornar deixando meu server/site off obrigado e espero resposta
  16. t0th

    Pesquisa lenta

    oLÁ, tenho a seguinte situação: mysql> show columns from categorias; +-------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | nome | varchar(40) | YES | | NULL | | +-------+------------------+------+-----+---------+----------------+ 2 rows in set (0.00 sec) mysql> show index from categorias; +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | categorias | 0 | PRIMARY | 1 | id | A | 4 | NULL | NULL | | BTREE | | +------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 1 row in set (0.00 sec) mysql> show columns from lojas;; +---------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | categorias_id | int(10) unsigned | NO | MUL | 0 | | | nome | varchar(60) | YES | | NULL | | | site | varchar(60) | YES | | NULL | | | logo | varchar(50) | YES | | NULL | | | lista | varchar(100) | YES | | NULL | | +---------------+------------------+------+-----+---------+----------------+ 6 rows in set (0.00 sec) mysql> show index from lojas;; +-------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +-------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ | lojas | 0 | PRIMARY | 1 | id | A | 16 | NULL | NULL | | BTREE | | | lojas | 1 | categorias_id | 1 | categorias_id | A | 8 | NULL | NULL | | BTREE | | +-------+------------+---------------+--------------+---------------+-----------+-------------+----------+--------+------+------------+---------+ 2 rows in set (0.01 sec) mysql> show columns from produtos; +----------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +----------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | lojas_id | int(10) unsigned | NO | MUL | 0 | | | nome | varchar(60) | YES | | NULL | | | codigo | varchar(15) | YES | | NULL | | | preço | varchar(10) | YES | | NULL | | | descc | text | YES | | NULL | | | foto | varchar(200) | YES | | NULL | | +----------+------------------+------+-----+---------+----------------+ 7 rows in set (0.00 sec) mysql> show index from produtos; +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ | produtos | 0 | PRIMARY | 1 | id | A | 26840 | NULL | NULL | | BTREE | | | produtos | 1 | lojas_id | 1 | lojas_id | A | 18 | NULL | NULL | | BTREE | | +----------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+ 2 rows in set (0.00 sec) mysql> EXPLAIN SELECT sql_cache produtos.nome,produtos.preço,lojas.nome as nomeLoja, site, produtos.id FROM produtos inner join lojas on lojas.id = produtos.lojas_id where ( produtos.nome LIKE '%processador%' or produtos.nome LIKE '%cpu%' or produtos.nome LIKE '%PROC %' or produtos.nome LIKE '%PROC. %' or produtos.nome LIKE '%PROCESADOR %') ORDER BY produtos.nome asc limit 0,30; +----+-------------+----------+--------+---------------+---------+---------+------------------------------------+-------+-----------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------+--------+---------------+---------+---------+------------------------------------+-------+-----------------------------+ | 1 | SIMPLE | produtos | ALL | lojas_id | NULL | NULL | NULL | 27560 | Using where; Using filesort | | 1 | SIMPLE | lojas | eq_ref | PRIMARY | PRIMARY | 4 | lojasnoparaguai1.produtos.lojas_id | 1 | | +----+-------------+----------+--------+---------------+---------+---------+------------------------------------+-------+-----------------------------+ 2 rows in set (0.00 sec) a TAbela produtos tem 27mil registro.. existe alguma maneira de optimizar essa consulta ou essas tabelas? desde já agradeço.. muito obrigado
×
×
  • Criar Novo...