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

Rækkestørrelsen er for stor (> 8126) kan jeg bare ændre InnoDB til MyISAM

Ja, du kan skifte til MyISAM. Men det er ikke nødvendigvis en god idé:

  • MyISAM understøtter ikke transaktioner
  • MyISAM-tabeller har ofte brug for REPAIR efter et nedbrud

En InnoDB-tabel kan håndtere mere end 8KB pr. række. Tilsyneladende løb du ind i problemet ved at have et dusin eller flere TEKST/BLOB-kolonner? Højst 767 bytes af en kolonne er lagret i hoveddelen af ​​rækken; resten lægges i en separat blok.

Jeg tror, ​​en ROW_FORMAT vil sætte alle store kolonner i en separat blok og efterlade kun 20 bytes til at pege på den.

En anden tilgang til brede rækker er at lave "lodret partitionering". Det vil sige, byg en anden tabel (eller tabeller) med en matchende PRIMARY KEY og nogle af de store kolonner. Det er især praktisk at flytte tyndt befolkede kolonne(r) til sådan en tabel, så have færre rækker i den tabel og bruge LEFT JOIN for at hente dataene. Også, hvis du har nogle kolonne(r), som du sjældent behøver at SELECT , så er det gode kandidater til at flytte -- ingen JOIN nødvendigt, når du ikke har brug for disse kolonner.




  1. Problemer med RewriteMap MapType dbd

  2. Introduktion til PL/SQL VARRAY'er i Oracle-databasen

  3. Hvordan fortolker du en forespørgsels forklaringsplan?

  4. Hurtigste måde at indlæse numeriske data i python/pandas/numpy array fra MySQL