sql >> Databáze >  >> RDS >> Mysql

Velikost řádku je příliš velká (> 8126) mohu jen změnit InnoDB na MyISAM

Ano, můžete přejít na MyISAM. Ale to není nutně dobrý nápad:

  • MyISAM nepodporuje transakce
  • Tabulky MyISAM často potřebují REPAIR po havárii

Tabulka InnoDB zvládne více než 8 kB na řádek. Zřejmě jste narazili na problém tím, že jste měli tucet nebo více sloupců TEXT/BLOB? V hlavní části řádku je uloženo nejvýše 767 bajtů sloupce; zbytek je umístěn v samostatném bloku.

Myslím, že jeden ROW_FORMAT umístí všechny velké sloupce do samostatného bloku a ponechá za sebou pouze 20 bajtů, aby na něj ukazovaly.

Dalším přístupem k širokým řádkům je „vertikální rozdělení“. To znamená, že vytvořte další tabulku (nebo tabulky) s odpovídajícím PRIMARY KEY a některé z velkých sloupů. Obzvláště praktické je přesunout do takové tabulky řídce osídlené sloupce, pak mít v tabulce méně řádků a použít LEFT JOIN k načtení dat. Také, pokud máte nějaké sloupce, které zřídka potřebujete SELECT , pak jsou to dobří kandidáti na přesun – žádné JOIN potřebné, když tyto sloupce nepotřebujete.




  1. Google App Engine a Cloud SQL:Ztráta připojení k serveru MySQL při „čtení počátečního komunikačního paketu“

  2. K získání informací o serveru v SQL Server použijte SERVERPROPERTY().

  3. Před vložením zkontrolujte duplikáty

  4. SQL dotaz k vytvoření databáze v MySQL