Question

Avec MyISAM ayant des colonnes de longueur variable (VARCHAR, blob) sur la table des requêtes vraiment ralenti pour que je rencontrais des conseils sur le net pour déplacer les colonnes varchar dans la table séparée.

Est-ce toujours un problème avec InnoDB? Je ne veux pas dire les cas où l'introduction de lignes varchar dans la table provoque split page. Je viens de vous considérer moyenne devriez, par exemple, déplacer POST_TEXT (seul champ BLOB dans la table) dans une autre table, parlant performance sage InnoDB?

Était-ce utile?

La solution

Pour autant que je sais (et BLOBs textes) sont stockés à l'extérieur de la table, Varchars sont stockés dans le tableau.

Varchars sont mauvais pour la performance de lecture car chaque enregistrement peut être de longueur variable et qui le rend plus coûteux de trouver des champs dans un enregistrement. Blobs sont lents parce que la valeur doit être puisée séparément et il faudra très probablement une autre lecture à partir du disque ou le cache.

A ma connaissance InnoDB ne fait rien différemment à cet égard, donc je suppose que les caractéristiques de performance tiennent.

Je ne pense pas que déplacer les valeurs de type BLOB aide vraiment - autre que la réduction de la taille du tableau d'ensemble qui a une influence positive sur la performance quel que soit. Varchars sont une autre histoire. Vous bénéficierez certainement ici. Si toutes vos colonnes sont de longueur définie (et je suppose que cela signifie que vous ne pouvez pas utiliser BLOBs non plus?) La recherche sur le terrain sera plus rapide.

Si vous êtes juste « lire » le VARHCAR et les champs blob, je dirais que cela vaut un coup de feu. Mais si vos besoins de sélection de requête pour comparer une valeur d'un VARCHAR ou d'un blob vous êtes assez aigre.

Alors oui vous pouvez certainement gagner en performance ici, mais vous vous faire test que vous êtes gagnant réellement les performances et que l'augmentation vaut la dénormalisation agressive.

PS.

Une autre façon de « l'optimisation » VARCHAR les performances de lecture est de les remplacer par des champs simplement CHAR (de longueur fixe). Cela pourrait profiter des performances de lecture, tant que l'augmentation de l'espace disque est acceptable.

Autres conseils

données InnoDB complètement différemment que MyISAM.

Dans tous les index MyISAM - primaires ou non --- sont stockés dans le fichier MYI un contenir un pointeur vers les données stockées dans le fichier .MYD. lignes de longueur variable ne devraient pas affecter directement la requête vitesse directement, mais le fichier MYD tend à se plus fragmenté avec des lignes de longueur variable parce que le trou laissé derrière lorsque vous supprimez une ligne ne peut pas nécessairement être déposée avec la ligne que vous insérer suivant. Si vous mettez à jour une valeur de longueur variable pour le rendre plus vous pourriez avoir à se déplacer à un autre endroit, ce qui signifie qu'il aura tendance à sortir le désordre par rapport aux indices au fil du temps, ce qui rend les requêtes de plages plus lente. (Si vous utilisez sur un disque rotatif où les temps de recherche sont importants).

InnoDB stocke les données dans les pages regroupées dans un B-tree sur la clé primaire. Tant que les données s'adapter dans une page il est stocké dans la page si vous utilisez un blob ou VARCHAR. Tant que vous n'êtes pas essayer d'insérer des valeurs longues démesurément sur une base régulière, il importe peu que vos lignes sont de longueur fixe ou de longueur variable.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top