sql >> Databasteknik >  >> RDS >> Mysql

Radstorleken är för stor (> 8126) kan jag bara ändra InnoDB till MyISAM

Ja, du kan byta till MyISAM. Men det är inte nödvändigtvis en bra idé:

  • MyISAM stöder inte transaktioner
  • MyISAM-tabeller behöver ofta REPAIR efter en krasch

En InnoDB-tabell kan hantera mer än 8KB per rad. Tydligen stötte du på problemet genom att ha ett dussin eller fler TEXT/BLOB-kolumner? Högst 767 byte av en kolumn lagras i huvuddelen av raden; resten läggs i ett separat block.

Jag tror att en ROW_FORMAT kommer att lägga alla stora kolumner i ett separat block, och lämnar kvar bara 20 byte för att peka på den.

Ett annat tillvägagångssätt för breda rader är att göra "vertikal partitionering". Det vill säga, bygg en annan tabell (eller tabeller) med en matchande PRIMARY KEY och några av de stora kolumnerna. Det är särskilt praktiskt att flytta glesbefolkade kolumner till en sådan tabell, sedan ha färre rader i den tabellen och använda LEFT JOIN för att hämta data. Dessutom, om du har några kolumner som du sällan behöver SELECT , då är de bra kandidater att flytta -- ingen JOIN behövs när du inte behöver dessa kolumner.




  1. Infoga formulärdata i två olika tabeller på databasen via jsp-sidan

  2. Laravel :Odefinierat index:drivrutin

  3. Hantera CDB Fleet i Oracle Database 18c

  4. Hur kan jag ändra från SQL Server Windows-läge till blandat läge (SQL Server 2008)?