sql >> Database teknologi >  >> RDS >> Mysql

Når du har et TEKST-felt i MySQL eller PostgreSQL, skal du så lægge det i en separat tabel?

Ikke med PostgreSQL, fra manualen :

Altså en kolonne med store tegn (såsom TEXT eller VARCHAR uden en specificeret størrelsesgrænse) gemmes væk fra hovedtabeldataene. Så PostgreSQL har din "sæt det i en separat tabel"-optimering indbygget. Hvis du bruger PostgreSQL, skal du arrangere din tabel fornuftigt og overlade datalayoutet til PostgreSQL.

Jeg ved ikke, hvordan MySQL eller andre RDBM'er arrangerer deres data.

Årsagen bag denne optimering er, at databasen normalt vil opbevare dataene for hver række i sammenhængende blokke på disken for at skære ned på at søge, når rækken skal læses eller opdateres. Hvis du har en TEKST (eller anden variabel længde type) kolonne i en række, så er rækkens størrelse variabel, så der skal mere arbejde til for at gå fra række til række. En analogi ville være forskellen mellem at få adgang til noget i en sammenkædet liste versus at få adgang til et array; med en sammenkædet liste skal du læse tre elementer et ad gangen for at komme til det fjerde, med et array forskyder du bare 3 * element_size bytes fra begyndelsen, og du er der i ét trin.



  1. Mysql PDO maksimal LONGBLOB-datalængde ved hentning

  2. Vis alle datoer mellem, selvom der ikke er noget resultat

  3. Salter mine hashes med PHP og MySQL

  4. Returner tabelprivilegier fra en sammenkædet server i SQL Server (T-SQL-eksempler)