sql >> Database >  >> RDS >> Mysql

Rijgrootte te groot (> 8126) kan ik InnoDB gewoon veranderen in MyISAM?

Ja, u kunt overstappen naar MijnISAM. Maar dat is niet per se een goed idee:

  • MijnISAM ondersteunt geen transacties
  • MijnISAM-tabellen hebben vaak REPAIR nodig na een crash

Een InnoDB-tabel kan meer dan 8KB per rij aan. Blijkbaar ben je het probleem tegengekomen door een dozijn of meer TEXT/BLOB-kolommen te hebben? Maximaal 767 bytes van een kolom worden opgeslagen in het hoofdgedeelte van de rij; de rest wordt in een apart blok gezet.

Ik denk dat een ROW_FORMAT zal alle grote kolommen in een apart blok plaatsen, waarbij er slechts 20 bytes overblijven om ernaar te verwijzen.

Een andere benadering van brede rijen is om "verticale partitionering" uit te voeren. Dat wil zeggen, bouw een andere tabel (of tabellen) met een overeenkomende PRIMARY KEY en enkele van de grote kolommen. Het is vooral handig om dunbevolkte kolom(men) naar zo'n tabel te verplaatsen, dan minder rijen in die tabel te hebben en LEFT JOIN te gebruiken om de gegevens op te halen. Ook als u enkele kolom(men) heeft die u zelden hoeft te SELECT , dan zijn dat goede kandidaten om te verhuizen -- geen JOIN nodig als je die kolommen niet nodig hebt.




  1. Groottelimiet voor MySQL VARCHAR

  2. PHP - Opmerking:Ongedefinieerde index:

  3. Postgres - MAAK TABEL UIT SELECT

  4. mysqli_error() verwacht precies 1 parameter, 0 gegeven