Estou trabalhando no design de um banco de dados grande. Na minha aplicação, terei muitas linhas, por exemplo, atualmente tenho uma tabela com 4 milhões de registros. A maioria das minhas consultas usa a cláusula datetime para selecionar dados. É uma boa ideia indexar campos de data e hora no banco de dados mysql?
Select field1, field2,.....,field15
from table where field 20 between now() and now + 30 days
Estou tentando manter meu banco de dados funcionando bem e as consultas sendo executadas sem problemas
Além disso, que idéia você acha que eu deveria ter para criar um banco de dados de alta eficiência?
field 20
?Respostas:
O MySQL recomenda o uso de índices por vários motivos, incluindo a eliminação de linhas entre condições: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
Isso torna sua coluna de data e hora um excelente candidato para um índice, se você a estiver usando em condições frequentes nas consultas. Se sua única condição for
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)
e você não tiver outro índice, o MySQL precisará fazer uma varredura completa da tabela em todas as consultas. Não tenho certeza de quantas linhas são geradas em 30 dias, mas contanto que seja menos de 1/3 do total de linhas, será mais eficiente usar um índice na coluna.Sua pergunta sobre a criação de um banco de dados eficiente é muito ampla. Eu diria para garantir que ela esteja normalizada e que todas as colunas apropriadas sejam indexadas (ou seja, aquelas usadas nas junções e nas cláusulas where).
fonte
SELECT
consulta mais rápida, apesar de eu ter indexado adate time
coluna. .. índice agiliza a consulta quando uso aequal
operação .. Estou certo?Aqui, os testes realizados pelo autor mostraram que o carimbo de data e hora unix inteiro é melhor que o DateTime. Note, ele usou o MySql. Mas acho que não importa qual mecanismo de banco de dados que você usa para comparar números inteiros seja um pouco mais rápido que comparar datas, portanto, o índice int é melhor que o índice DateTime. Tome T1 - tempo de comparar 2 datas, T2 - tempo de comparar 2 números inteiros. A pesquisa no campo indexado leva aproximadamente O (log (linhas)) tempo, porque o índice é baseado em alguma árvore balanceada - pode ser diferente para diferentes mecanismos de banco de dados, mas mesmo assim o Log (linhas) é uma estimativa comum. (se você não usar o índice baseado em máscara de bits ou em árvore r). Portanto, a diferença é (T2-T1) * Log (linhas) - pode desempenhar um papel se você executar sua consulta com frequência.
fonte