Je travaille sur la conception d'une grande base de données. Dans mon application, j'aurai de nombreuses lignes par exemple, j'ai actuellement une table avec 4 millions d'enregistrements. La plupart de mes requêtes utilisent la clause datetime pour sélectionner des données. Est-ce une bonne idée d'indexer les champs datetime dans la base de données mysql?
Select field1, field2,.....,field15
from table where field 20 between now() and now + 30 days
J'essaie de faire en sorte que ma base de données fonctionne correctement et que les requêtes soient exécutées correctement
De plus, quelle idée pensez-vous que je devrais avoir pour créer une base de données à haute efficacité?
field 20
?Réponses:
MySQL recommande d'utiliser les index pour diverses raisons, y compris l'élimination des lignes entre les conditions: http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html
Cela fait de votre colonne datetime un excellent candidat pour un index si vous comptez l'utiliser fréquemment dans des requêtes. Si votre seule condition est
BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)
et que vous n'avez pas d'autre index dans la condition, MySQL devra effectuer une analyse complète de la table sur chaque requête. Je ne sais pas combien de lignes sont générées en 30 jours, mais tant que c'est moins d'environ 1/3 du nombre total de lignes, il sera plus efficace d'utiliser un index sur la colonne.Votre question sur la création d'une base de données efficace est très large. Je dirais simplement de s'assurer qu'il est normalisé et que toutes les colonnes appropriées sont indexées (c'est-à-dire celles utilisées dans les jointures et les clauses where).
la source
SELECT
requête plus rapide même si j'ai indexé ladate time
colonne. .. index rend la requête rapide lorsque j'utilise l'equal
opération .. Ai-je raison?Ici, les tests effectués par l'auteur ont montré que l'horodatage unix entier est meilleur que DateTime. Notez qu'il a utilisé MySql. Mais je pense que quel que soit le moteur de base de données que vous utilisez, la comparaison des entiers est légèrement plus rapide que la comparaison des dates, donc l'index int est meilleur que l'index DateTime. Prenez T1 - temps de comparaison de 2 dates, T2 - temps de comparaison de 2 entiers. La recherche sur un champ indexé prend environ O (log (lignes)) temps parce que l'index est basé sur un arbre équilibré - il peut être différent pour différents moteurs de base de données, mais de toute façon Log (lignes) est une estimation courante. (si vous n'utilisez pas de masque de bits ou d'index basé sur r-tree). La différence est donc (T2-T1) * Log (lignes) - peut jouer un rôle si vous effectuez votre requête souvent.
la source