N'a pas trouvé de réponse claire à cette question ici.Évolutivité d'insertion/mise à jour (recherche dans une liste de plus en plus longue pour la mise à jour impossible à mettre en correspondance)
J'effectuer une base « Insérer/Mettre à jour » - canalisant de nouvelles données dans une base de données MySQL de « billets »
Par exemple:
ticket_id: 154
status: open
messages: 2
Ce serait un billet dans le. DB
Un enregistrement entrant serait inséré/mis à jour en fonction du ticket_id. Aka si le ticket_id est nouveau, il sera inséré, s'il est recherché et trouvé, il sera mis à jour. tickets_ids sont incrémentés séquentiellement dans l'ordre croissant. cket_id 1 est le premier ticket, etc.
Voici mon problème. En ce moment, je suis insertion/mise à jour contre 100 000 ticket_ids dans la base de données. Chaque insertion/mise à jour d'écriture (contrairement à une insertion pure) - doit rechercher chaque ID entrant contre 100 000 ID pour déterminer une correspondance potentielle pour la mise à jour. Chaque mois, cela sera augmenté de 60 000 billets supplémentaires jusqu'à ce que plus de 1 000 000 ticket_ids soient "recherchés" lors de chaque insertion/mise à jour quotidienne. Ce n'est pas évolutif. En fait, il semble que ce soit un problème extrêmement commun pour toute insertion/mise à jour régulière dans une grande base de données MySQL.
Voici les potentiels de bonnes choses:
- Ticket_IDs sont uniques et augmentent de manière séquentielle
- billets deviennent Statut: Fermé après 30 jours d'inactivité. Cela signifie qu'ils ne seront jamais mis à jour à nouveau. C'est la clé ici. Je ne sais pas comment techniquement "ignorer" ces tickets lors d'une insertion/mise à jour sans les "regarder" tous les jours. Une méthode consiste à transférer tous les jours, ou tous les mois, les tickets «fermés» vers une table DB distincte et à utiliser une union pour les requêtes de base de données. Des pensées à ce sujet? Je ne suis aucun administrateur de DB par aucun moyen.
Est-ce la réponse? 2 tables, et l'archivage des tickets?
Et aussi ... Y at-il avantage à indexer Ticket_ID? J'ai entendu que cela augmente le temps d'écriture, mais diminue le temps de lecture.
Mon problème en ce moment, je pense, est l'heure d'écriture pour l'insertion/mise à jour, pas les instructions SELECT. Mais un gars m'a dit que l'insertion/mise à jour est essentiellement un SELECT/recherche de toute façon.
Vous avez probablement déjà un index sur Ticket_id en fonction de la configuration de votre table. Cela permettra à votre table d'augmenter à presque n'importe quelle taille avec peu de changement à la vitesse de votre requête. Non seulement cela, mais avec la simplicité de vos requêtes, le temps de lecture/écriture devrait être négligeable de toute façon. –