2008-10-16 9 views
9

Est-il moins efficace d'utiliser TEXT que varchar dans une base de données SQL?Bases de données: Les champs "TEXT" sont-ils moins efficaces que "varchar"?

Si oui, pourquoi?

Si non, pourquoi n'utiliserais-tu pas toujours TEXT?

Je ne suis pas en train de cibler une base de données spécifique, mais Oracle est probablement le plus pertinent, bien que je teste MySQL pour l'instant dans le cadre d'une validation de principe.

+0

Je pense que tout a été dit, dans le cas de MySQL, il y a aussi "INDEX READ" pour les colonnes varchar et toujours un "ROW READ" pour les colonnes de texte. Ce qui rend une requête LIKE plus lente sur une colonne TEXT. – Till

Répondre

4

De Microsoft here

ntext, le texte et les types de données d'image sera supprimée dans une future version de Microsoft SQL Server. Évitez d'utiliser ces types de données dans le nouveau développement travail, et prévoyez de modifier les applications qui les utilisent actuellement. Utilisez nvarchar (max), varchar (max) et varbinary (max) à la place.

Lorsque vous utilisez varchar(max) sur le texte que vous pouvez l'utiliser dans la clause WHERE, parce qu'ils travaillent les mêmes que leurs homologues plus petits, varchar,nvarchar and varbinary. Voici une petite liste de ce qui devrait être utilisé par opposition ce qui devait être utilisé:

  • Utilisez varchar (max) au lieu du texte
  • Utilisez nvarchar (max) au lieu de ntext
  • utilisation varbinary (max) au lieu de l'image
1

La réponse courte est: Oui, ils sont moins efficaces.

Plus, réponse plus alambiquée est:

Oui, ils sont probablement moins efficaces. Cela dépend du SGBD que vous utilisez et de la taille de votre table, etc., etc. Les champs TEXT ont une largeur variable, et en tant que tel, le SGBD doit faire plus de travail lorsqu'il essaie de trouver des enregistrements. L'impact sur vos performances est directement proportionnel à l'efficacité de votre SGBD en général, à la quantité de données stockées sur les lignes de table et à l'optimisation des tables de longueurs fixes.

Je sais que MySQL fonctionne plus vite avec des lignes de table de longueur fixe, mais vous devez dire que la table peut d'abord être traitée comme une table de longueur fixe. Je n'ai pas vraiment d'expérience pratique avec d'autres SGBD pour pouvoir relier les chiffres réels. Mais sur les tables avec beaucoup (lit un million ou plus) d'enregistrements, cela peut faire une différence significative. Les tables plus petites auront peu ou pas de différence pratique.

+0

C'est 'TEXT' contre' CHAR'. L'OP a demandé «TEXT» par rapport à «VARCHAR». – dan04

1

Vous devez être précis sur la base de données dont vous parlez. Je crois en au moins certaines bases de données, TEXT est stocké comme un CLOB séparé de la table elle-même (qui contient juste une référence). Cela conduit à une table plus petite (bonne) mais à une recherche supplémentaire et probablement à un cache manquant lors de la récupération (mauvaise).

Il y a probablement aussi des implications d'indexation et d'interrogation, mais encore une fois cela dépendra du SGBDR que vous utilisez.

2

PostgreSQL documentation says:

Astuce: Il n'y a pas de différence de performance entre ces trois types, à l'exception de la taille de stockage accrue lors de l'utilisation du type complété par des blancs, et quelques cycles supplémentaires pour vérifier la longueur lors de l'enregistrement dans un colonne contrainte par la longueur. Alors que character (n) a des avantages de performance dans d'autres systèmes de base de données, il n'a pas de tels avantages dans PostgreSQL. Dans la plupart des situations, le texte ou le caractère variable doit être utilisé à la place.