J'ai besoin d'aide pour indexer MySQL. J'ai une table MySQL avec des lignes suivantes:Table d'indexation avec doublons MySQL/SQL Server avec des millions d'enregistrements
ID Feature_ID Order_ID Viewed_Date Numéro magasin deal_id IsTrial
L'ID est généré automatiquement. Store_ID va de 1 à 8. Feature_ID à partir de 1 - disons 100. Date de consultation Date et heure auxquelles les données sont insérées. IsTrial est 0 ou 1.
Vous pouvez ignorer Order_ID et Deal_ID à partir de cette discussion. Il y a des millions de données dans la table et nous avons un backend de reporting qui doit afficher le nombre de vues dans une période donnée ou globalement où trial est 0 pour un identifiant de magasin particulier et pour une fonctionnalité particulière.
La requête prend la forme de:
select count(viewed_date)
from theTable
where viewed_date between '2009-12-01' and '2010-12-31'
and store_id = '2'
and feature_id = '12'
and Istrial = 0
Dans SQL Server, vous pouvez avoir un index filtré à utiliser pour Istrial. Y a-t-il quelque chose de similaire dans MySQL? En outre, Store_ID et Feature_ID contiennent beaucoup de données en double. J'ai créé un index en utilisant Store_ID et Feature_ID. Bien que cela semble avoir diminué la période de recherche, j'ai besoin d'une meilleure amélioration que cela. En ce moment j'ai plus de 4 millions de lignes. Pour rechercher une requête particulière comme celle ci-dessus, il regarde 3,5 millions de lignes afin de me donner le nombre de 500k lignes.
PS. J'ai oublié d'ajouter le filtre view_date dans la requête. Maintenant j'ai fait ça.
Combien de temps faut-il pour compléter la sélection donnée? S'il vous plaît également envisager de choisir les bits « code » et en cliquant sur le bouton 0101010 dans la page d'édition pour mettre en évidence le code (comme les structures de la requête ou de table) –
Merci pour la suggestion de code. Je reviendrai à vous avec plus de détails. – Tesnep