Tenho a seguinte consulta:
SELECT COUNT(*) AS `numrows`
FROM (`phppos_items`)
WHERE `deleted` = 0
explique:
mysql> explain SELECT COUNT(*) AS `numrows`
-> FROM (`phppos_items`)
-> WHERE `deleted` = 0;
+----+-------------+--------------+------+---------------+---------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+--------------+------+---------------+---------+---------+-------+------+-------------+
| 1 | SIMPLE | phppos_items | ref | deleted | deleted | 4 | const | 1 | Using index |
+----+-------------+--------------+------+---------------+---------+---------+-------+------+-------------+
Essa consulta sempre será indexada E rapidamente conforme as linhas da tabela crescem?
"Esta consulta sempre será indexada E rapidamente à medida que as linhas na tabela crescem?"
Definitivamente não necessariamente. Se houver muitos registros e/ou o valor deletado estiver distorcido de alguma forma (ou seja, é (quase) sempre um valor específico ou dividido 50-50), então o otimizador pode decidir ignorar um determinado índice. Pesquisar no Google " por que o mysql não usa um índice " fornece 3,5 milhões de resultados
[EDITAR]
Você disse:
"Obrigado por sua resposta. Existe um tipo diferente de consulta que eu possa usar para contar o número de linhas com uma cláusula WHERE?"
Não - é para isso que serve COUNT(). Veja aqui . Basicamente, você não pode contornar problemas como o que você descreveu - os índices são frequentemente úteis, mas não há uma "bala mágica" que irá lidar bem com todos os volumes de dados e perfis.
Para ver como esse problema é difícil, confira aqui - são > 600 páginas sobre os fundamentos de como um RDBMS decide sobre o melhor plano para uma consulta. Está longe de ser um problema trivial!