sql >> Database >  >> RDS >> PostgreSQL

Zijn er nadelen aan het gebruik van tekst van het gegevenstype voor het opslaan van strings?

Over het algemeen is er geen nadeel van het gebruik van text qua prestaties/geheugen. Integendeel:text het optimum is. Andere typen hebben min of meer relevante nadelen. text is letterlijk het "voorkeurstype" onder stringtypes in het Postgres-typesysteem, wat van invloed kan zijn op de functie of de resolutie van het operatortype.

In het bijzonder nooit gebruik char(n) (alias voor character(n) ), tenzij u weet wat u doet. char of character zijn gewoon een afkorting voor character(1) , dus allemaal hetzelfde. De interne naam is bpchar (staat voor "blanco opgevuld karakter"). Het type is er alleen voor compatibiliteit met oude code en standaarden. Het heeft tegenwoordig weinig zin, verspilt geheugen en veroorzaakt waarschijnlijk problemen:

  • Vergelijk varchar met char
  • Stringveldlengte in Postgres SQL

U kunt varchar(n) . gebruiken met lengtemodificator (alias voor character varying(n) ). Maar varchar(255) geeft meestal een misverstand aan dat is overgenomen van andere RDBMS, waar het een lokaal optimum voor prestaties kan zijn. In Postgres, de lengtemodifier (255) heeft geen speciale betekenis en is zelden zinvol.

  • Moet ik een willekeurige lengtelimiet toevoegen aan VARCHAR-kolommen?

Oudere versies veroorzaakten verschillende problemen bij het wijzigen van de lengtemodifier van varchar(n) later. De meeste daarvan zijn verholpen in het moderne Postgres, maar text of varchar (alias voor character varying ) zonder lengtespecificatie (en een CHECK beperking) nooit een van deze problemen gehad.

EEN CHECK beperking is net zo snel en zal minder snel problemen veroorzaken met afhankelijke weergaven, functies, FK-beperkingen enz. die afhankelijk zijn van het kolomtype. En het kan meer doen dan alleen een maximale tekenlengte afdwingen - alles wat je in een booleaanse uitdrukking kunt zetten. Zie:

  • Verander PostgreSQL-kolommen die worden gebruikt in weergaven

Ten slotte is er ook nog "char" (met dubbele aanhalingstekens):een gegevenstype van 1 byte voor een enkele ASCII-letter die wordt gebruikt als goedkoop intern enumeratietype.

Ik gebruik zelden iets anders dan text voor karaktergegevens in Postgres.



  1. AVG()-functie in MariaDB

  2. SQLite - Kan databasebestand niet openen

  3. Hoe de primaire sleutel van de MySQL-tabel automatisch te laten toenemen met een of ander voorvoegsel?

  4. Het mengen van expliciete en impliciete joins mislukt met Er is een item voor tabel ... maar er kan niet naar worden verwezen vanuit dit deel van de query