sql >> Databasteknik >  >> RDS >> PostgreSQL

Några nackdelar med att använda datatyptext för att lagra strängar?

I allmänhet finns det nej nackdelen med att använda text vad gäller prestanda/minne. Tvärtom:text är det optimala. Andra typer har mer eller mindre relevanta baksidor. text är bokstavligen den "föredragna" typen bland strängtyper i Postgres-typsystemet, vilket kan påverka funktion eller operatörstypupplösning.

I synnerhet aldrig använd char(n) (alias för character(n) ), om du inte vet vad du gör. char eller character är bara kort för character(1) , så ändå. Det interna namnet är bpchar (står för "blank-padded karaktär"). Typen finns endast där för kompatibilitet med gamla koder och standarder. Det är väldigt lite vettigt nuförtiden, slösar bort minne och kommer sannolikt att orsaka problem:

  • Jämför varchar med char
  • Strängfältslängd i Postgres SQL

Du kan använda varchar(n) med längdmodifierare (alias för character varying(n) ). Men varchar(255) indikerar vanligtvis ett missförstånd som överförts från andra RDBMS där det kan vara ett lokalt optimum för prestanda. I Postgres, längdmodifieraren (255) har ingen speciell betydelse och är sällan vettigt.

  • Ska jag lägga till en godtycklig längdgräns för VARCHAR-kolumner?

Äldre versioner orsakade olika problem när man försökte ändra längdmodifieraren för varchar(n) senare. De flesta av dessa har lindrats i modern Postgres, men text eller varchar (alias för character varying ) utan längdspecifikation (och en CHECK begränsning istället) har aldrig haft några av dessa problem.

En CHECK begränsning är lika snabb och mindre sannolikt att orsaka problem med beroende vyer, funktioner, FK-begränsningar etc. som beror på kolumntypen. Och det kan göra mer än att bara tvinga fram en maximal teckenlängd - allt du kan lägga i ett booleskt uttryck. Se:

  • Ändra PostgreSQL-kolumner som används i vyer

Slutligen finns det också "char" (med dubbla citattecken):en 1-byte datatyp för en enda ASCII-bokstav som används som billig intern uppräkningstyp.

Jag använder sällan annat än text för teckendata i Postgres.



  1. Entity-framework-koden är långsam när du använder Include() många gånger

  2. Hur kan jag aktivera MySQLi-tillägget i PHP 7?

  3. Icke-nummertecken som returnerar positivt när ISNUMERIC() används i SQL Server

  4. En introduktion till TimescaleDB