Est-ce une bonne idée d’indexer le champ datetime dans mysql?

Je travaille sur la conception d’une grande firebase database. Dans mon application, j’aurai plusieurs lignes par exemple. Je possède 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 firebase database mysql?

Select field1, field2,.....,field15 from table where field 20 between now() and now + 30 days 

J’essaie de garder ma firebase database fonctionnant bien et les requêtes exécutées en douceur

Plus, quelle idée pensez-vous que je devrais avoir pour créer une firebase database à haut rendement?

MySQL recommande d’utiliser des index pour diverses raisons, notamment 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 candidat idéal pour un index si vous comptez l’utiliser fréquemment dans les 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 parsing complète de la table pour chaque requête. Je ne suis pas sûr du nombre de lignes générées en 30 jours, mais tant que le nombre total de lignes est inférieur à 1/3, il sera plus efficace d’utiliser un index sur la colonne.

Votre question sur la création d’une firebase database efficace est très large. Je dirais juste de s’assurer qu’il est normalisé et que toutes les colonnes appropriées sont indexées (c’est-à-dire utilisées dans les jointures et les clauses where).

Ici, les tests réalisés par les auteurs ont montré que l’horodatage unix entier est meilleur que DateTime. Notez qu’il a utilisé MySQL. Mais je pense que peu importe le moteur de firebase database que vous utilisez, comparer des entiers est légèrement plus rapide que de comparer des dates, donc int index est meilleur que l’index DateTime. Prendre T1 – temps de comparaison de 2 dates, T2 – temps de comparaison de 2 nombres entiers. La recherche sur un champ indexé prend approximativement le temps O (log (lignes)) car l’index est basé sur une arborescence équilibrée – il peut être différent pour différents moteurs de firebase database mais de toute façon, Log (lignes) est une estimation commune. (si vous n’utilisez pas le bitmask ou l’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.