Ir para conteúdo

POWERED BY:

Arquivado

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

cassiano óliver

[Resolvido] Update / Select em tabela com milhares de registros

Recommended Posts

Bom dia pessoal,

 

tenho um sistema de banners.

 

CREATE TABLE IF NOT EXISTS `banners` (
 `id` smallint(5) NOT NULL AUTO_INCREMENT,
 `cid` tinyint(2) NOT NULL,
 `nome` varchar(100) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
 `src` text COLLATE utf8_unicode_ci NOT NULL,
 `url` varchar(150) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
 `target` varchar(7) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
 `tipo` varchar(4) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
 `formato` varchar(30) COLLATE utf8_unicode_ci NOT NULL,
 `aid` tinyint(2) NOT NULL DEFAULT '0',
 `largura` smallint(7) NOT NULL DEFAULT '0',
 `altura` smallint(7) NOT NULL DEFAULT '0',
 `exibs` int(6) NOT NULL DEFAULT '0',
 `cliques` int(6) NOT NULL DEFAULT '0',
 `maxexibs` int(6) NOT NULL DEFAULT '0',
 `data` date NOT NULL DEFAULT '0000-00-00',
 `data_expira` date NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

 

CREATE TABLE IF NOT EXISTS `banners_stats` (
 `bid` smallint(4) NOT NULL,
 `exibs` smallint(5) NOT NULL,
 `cliques` smallint(5) NOT NULL,
 `data` date NOT NULL,
 `ip` varchar(15) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

 

 

UPDATE Utilizado quando não há um registro de IP para acesso na data atual

UPDATE banners_stats SET exibs = exibs + 1, ip = '$ip' WHERE bid = '$bid' && ip = '$ip'

 

Estou tendo lentidão (timeout) em um UPDATE há uma tabela (estatísticas de banners), após vários testes no site constatei este problema.

Verifiquei que esta está com 600 mil registros.

 

Para não popular ainda mais a tabela, quando desenvolvi o sistema, fiz com que se um IP já visitou um determinado banner (na mesma data) eu apenas incremento "1" view a este registro, caso contrário, insiro um novo registro na tabela.

 

Pois bem, no script que exibe o banner, há um UPDATE e este está gerando a lentidão, pois deve atualizar o registro (se já existe na data de hoje).

 

Há alguma técnica ou otimização para estes casos (UPDATE / SELECT em tabelas com milhões de registros)?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Neste caso bastaria pelos campos da pesquisa bid,ip.

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.