Minha consulta não está usando índices.
estava demorando cerca de 5 segundos.
a saída é de apenas 500 linhas. é uma consulta simples
Encontre o plano de explicação e a estrutura da tabela aqui.
Explicar o plano
mysql> explain SELECT COUNT(*) AS `records_found`
FROM `builds` AS `build`
WHERE (`user_id` = '32762'
AND `country_id` = 'gb'
AND `share` = 0
AND `mode` = 'bouquet'
AND `build_data` != '');
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| 1 | SIMPLE | build | ALL | NULL | NULL | NULL | NULL | 35209 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
1 row in set (0.00 sec)
Estrutura da tabela
mysql> show create table builds\G
*************************** 1. row ***************************
Table: builds
Create Table: CREATE TABLE `builds` (
`build_id` varchar(8) NOT NULL,
`user_id` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
`derivation` int(11) NOT NULL,
`share` tinyint(4) NOT NULL,
`country_id` varchar(2) NOT NULL,
`build_data` text NOT NULL,
`mode` varchar(250) DEFAULT NULL,
PRIMARY KEY (`build_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
De acordo com a estrutura da sua tabela, você só tem um
PRIMARY KEY
onbuild_id
.Assim, não há nenhum índice que possa ser utilizado para resolver esta consulta. Suspeito que você seja muito novo em índices; ter um índice em alguma coluna não significa que todas as consultas serão executadas mais rapidamente. Você precisa de um índice que corresponda à sua consulta.
Por exemplo, no seu caso, um índice em
user_id
ou um índice emcountry_id
ou um índice emshare
ou um índice emmode
funcionaria; Índices em combinações dos itens acimaINDEX (user_id, country_id)
também funcionariam bem.Qual você deve escolher? Um que limitaria significativamente o número de linhas para "pesquisar manualmente" (por assim dizer) e um que funcionaria bem para suas outras consultas comuns.
Minha recomendação para você é estudar como os índices funcionam em bancos de dados relacionais.