mysql - How to improve the performance of this query -


i have broken head try create indices, or change mysql configuration improve query i'm not getting it. me?

i creating system has more 4 million products , improve response time user, creating materialized view.

to create view use query below

insert      consulta_atual  select      fc.cd_categoria,      tbc.cd_categoria cd_categoria_site,      tbc.nm_categoria,      fc.ds_subcategoria, ppf.cd_produto_price,     ppf2.cd_seq,     f.tp_fornecedor tp_fornecedor ,     pp.nm_produto name,     pp.nm_slug nm_slug,     pf.cd_fornecedor fornecedor,     f.url_img_fornecedor url_img_fornecedor,     f.url_raiz_fornecedor url_raiz_fornecedor,     pf.url_imagem url_imagem,     concat(ifnull(pf.url_produto_fornecedor_prefix,''),pf.url_produto_fornecedor,ifnull(pf.url_produto_fornecedor_sufix,'')) url_produto,     concat('r$ ', replace(replace(replace(format(ppf.vlr_produto, 2),'.',';'),',','.'),';',',')) vlr_produto,     concat(replace(replace(replace(format(ppf.vlr_produto, 0),'.',';'),',','.'),';',','),' pontos') pnt_produto,     ppf.vlr_produto vlr_produto_original,     null,     null,     null       produto_price pp,     produto_fornecedor pf,     preco_produto_fornecedor ppf,     fornecedores f,     fornecedores_categorias fc,     vw_preco_atual ppf2,     tb_st_category tbc           pp.cd_produto = pf.cd_produto_price      , pf.cd_categoria = fc.cd_categoria      , fc.cd_categoria_site = tbc.cd_categoria      , pp.cd_produto = ppf2.cd_produto_price      , pf.cd_fornecedor = f.cd_fornecedor      , pf.cd_fornecedor = ppf2.cd_fornecedor      , ppf2.cd_seq = ppf.cd_seq 

however, passage of time, , increasing product taking 4 hours table being created. possible improve shifting performance indices of tables or configuration?

script create tables

create table if not exists `consulta_atual` (   `cd_categoria` int(11) not null default '0',   `cd_categoria_site` int(11) default null,   `ds_categoria` varchar(100) not null,   `ds_subcategoria` varchar(200) not null,   `cd_produto_price` bigint(11) not null,   `cd_seq` bigint(20) not null default '0',   `tp_fornecedor` int(11) not null default '0',   `name` varchar(300) not null,   `nm_slug` varchar(200) default null,   `fornecedor` int(11) not null,   `url_img_fornecedor` varchar(200) not null,   `url_raiz_fornecedor` varchar(200) not null,   `url_imagem` varchar(500) not null,   `url_produto` varchar(500) not null,   `vlr_produto` varchar(49) not null default '',   `pnt_produto` varchar(53) not null default '',   `vlr_produto_original` float(10,2) not null,   `menor_valor` float default null,   `maior_valor` float default null,   `qtd_lojas` int(11) default null,   primary key (`cd_produto_price`,`fornecedor`),   key `nm_slug_2` (`nm_slug`),   key `ds_categoria` (`ds_categoria`),   key `vlr_produto_original` (`vlr_produto_original`),   key `cd_categoria_site` (`cd_categoria_site`),   key `fornecedor` (`fornecedor`),   key `tp_fornecedor` (`tp_fornecedor`),   fulltext key `name` (`name`),   fulltext key `ds_categoria_2` (`ds_categoria`),   fulltext key `ds_categoria_3` (`ds_categoria`,`name`) ) engine=myisam default charset=utf8; 

and

create table if not exists `fornecedores` (   `cd_fornecedor` int(11) not null auto_increment,   `nm_fornecedor` varchar(50) not null,   `tp_fornecedor` int(11) not null default '0',   `url_img_fornecedor` varchar(200) not null,   `dt_atualizacao` timestamp not null default '0000-00-00 00:00:00' on update current_timestamp,   `url_raiz_fornecedor` varchar(200) not null,   primary key (`cd_fornecedor`) ) engine=myisam  default charset=utf8 auto_increment=16 ;  create table if not exists `fornecedores_categorias` (   `cd_categoria` int(11) not null auto_increment,   `cd_fornecedor` int(11) not null,   `cd_categoria_site` int(11) default null comment 'referencia categoria site',   `ds_categoria` varchar(100) not null,   `url_categoria` varchar(200) not null,   `cd_prioridade` int(11) not null default '1',   `ds_subcategoria` varchar(200) not null,   primary key (`url_categoria`),   unique key `cd_categoria` (`cd_categoria`),   key `ds_categoria` (`ds_categoria`),   key `cd_categoria_site` (`cd_categoria_site`) ) engine=myisam  default charset=utf8 auto_increment=6112 ; 

and

create table if not exists `preco_produto_fornecedor` (   `cd_seq` bigint(20) not null auto_increment,   `cd_produto_price` bigint(11) not null,   `cd_fornecedor` int(11) not null,   `dt_atualizacao` timestamp not null default current_timestamp,   `vlr_produto` float(10,2) not null,   `flg_sucesso` tinyint(1) not null,   primary key (`cd_seq`,`cd_produto_price`,`cd_fornecedor`),   key `dt_atualizacao` (`dt_atualizacao`),   key `cd_fornecedor` (`cd_fornecedor`),   key `vlr_produto` (`vlr_produto`),   key `cd_produto_price` (`cd_produto_price`) ) engine=innodb  default charset=utf8 auto_increment=151452428 ;  create table if not exists `produto_fornecedor` (   `cd_produto_price` bigint(11) not null,   `ds_produto` varchar(5000) default null,   `cd_categoria` int(11) not null,   `url_produto_fornecedor` varchar(500) not null,   `url_produto_fornecedor_prefix` varchar(200) default null comment 'url afiliados antes',   `url_produto_fornecedor_sufix` varchar(200) default null comment 'url afiliados depois',   `url_imagem` varchar(500) not null,   `cd_fornecedor` int(11) not null,   `flg_ativo` tinyint(1) not null,   `dt_atualizacao` timestamp not null default '0000-00-00 00:00:00' on update current_timestamp,   primary key (`cd_produto_price`,`cd_fornecedor`),   key `ds_produto_2` (`ds_produto`(333)) ) engine=myisam default charset=utf8; 

and

create table if not exists `produto_price` (   `cd_produto` bigint(11) not null auto_increment,   `nm_produto` varchar(300) not null,   `nm_slug` varchar(200) default null,   `cd_categoria` int(11) not null,   primary key (`cd_produto`),   unique key `nm_produto_2` (`nm_produto`),   unique key `nm_slug_2` (`nm_slug`),   fulltext key `nm_produto` (`nm_produto`) ) engine=myisam  default charset=utf8 auto_increment=3861158 ;  create table if not exists `tb_st_category` (   `cd_categoria` int(11) not null auto_increment,   `nm_categoria` varchar(100) not null,   `ds_categoria` varchar(500) default null,   `url_img_categoria` varchar(100) default null,   `nm_slug` varchar(100) default null comment 'nome amigavel da categoria para poder indexar no google',   `flg_menu_topo` tinyint(1) not null default '1' comment 'flag para aparecer ou nao no menu site',   `flg_categoria_especial` tinyint(1) not null default '0' comment 'flag para aparecer com prioridade (ex.: categoria de natal)',   `cd_categoria_pai` int(11) not null default '0' comment 'se tiver com numero maior que 0 é uma subcategoria',   `flg_ativo` tinyint(1) not null default '0' comment '0 desativado 1 ativo',   `dt_cadastro` timestamp not null default current_timestamp comment 'data que foi criado categoria',   primary key (`cd_categoria`),   fulltext key `ds_categoria` (`ds_categoria`) ) engine=myisam  default charset=utf8 auto_increment=437 ;  create table if not exists `vw_preco_atual` (   `cd_produto_price` bigint(11) not null,   `cd_fornecedor` int(11) not null,   `cd_seq` bigint(20) not null default '0',   primary key (`cd_fornecedor`,`cd_produto_price`),   unique key `cd_seq` (`cd_seq`) ) engine=myisam default charset=utf8; 

replace commands in query expensive. try reduce them as possible. index fields used condition

i see insert resultset in table. records inserted, not need processed again. best way run query newly created records using timestamp. if don't have timestamps, introduce them newly. once process records upto time, store somewhere. , start time current time. in way of batching, reduce unnecessary time old records..


Comments

Popular posts from this blog

php - Wordpress website dashboard page or post editor content is not showing but front end data is showing properly -

How to get the ip address of VM and use it to configure SSH connection dynamically in Ansible -

javascript - Get parameter of GET request -