Mysql
 sql >> база данни >  >> RDS >> Mysql

Размерът на реда е твърде голям (> 8126) мога ли просто да променя InnoDB на MyISAM

Да, можете да преминете към MyISAM. Но това не е непременно добра идея:

  • MyISAM не поддържа транзакции
  • Таблиците MyISAM често се нуждаят от REPAIR след катастрофа

Таблица InnoDB може да обработва повече от 8KB на ред. Очевидно сте се сблъскали с проблема, като сте имали дузина или повече TEXT/BLOB колони? В основната част на реда се съхраняват най-много 767 байта от колона; останалото се поставя в отделен блок.

Мисля, че един ROW_FORMAT ще постави всички големи колони в отделен блок, оставяйки след себе си само 20 байта, които да сочат към него.

Друг подход към широките редове е да се направи "вертикално разделяне". Тоест, създайте друга таблица (или таблици) със съвпадащ PRIMARY KEY и някои от големите колони. Особено удобно е да преместите рядко населени колони към такава таблица, след това да имате по-малко редове в тази таблица и да използвате LEFT JOIN за извличане на данните. Освен това, ако имате колона(и), които рядко се налага да SELECT , тогава това са добри кандидати за преместване - без JOIN необходими, когато нямате нужда от тези колони.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysqli_connect():(HY000/2003):Не мога да се свържа с MySQL сървър на „име на домейн“ (111)

  2. PHP Изберете от MySQL, където полето за дата е 7 дни в бъдещето

  3. когато използвам MySQL Database System с Jena2, получих java.lang.NoSuchMethodError

  4. Променете тип колона от Date на DateTime по време на миграция на ROR

  5. PROTOCOL_ENQUEUE_AFTER_FATAL_ERROR в Node-MySqL