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

Velký počet sloupců, Vybrat vše trvá věčně

InnoDB ukládá „široké“ tabulky jiným způsobem. Namísto toho, aby byly všechny sloupce pohromadě v jednom řetězci (plus režie, jako jsou délky atd.), dělá následující:

  • Pokud součet všech sloupců pro daný řádek překročí přibližně 8 kB, přesune se některá data do jiného ("nezáznamového") úložiště.
  • Které sloupce jsou přesunuty mimo záznam, závisí na velikosti sloupců atd.
  • Podrobnosti závisí na ROW_FORMAT vybráno.
  • „Off-record“ je další blok (nebo bloky) o velikosti 16 kB.
  • Později při provádění příkazu SELECT * (nebo alespoň načtení sloupců mimo záznam), musí provést další načtení disku.

Co dělat?

  • Zamyslete se nad tím, že máte tolik sloupců.
  • Zvažte "vertikální rozdělení", kde máte další tabulku(y), která obsahuje vybraný TEXT sloupců. Navrhněte výběr skupin sloupců na základě vzorů přístupu ve vaší aplikaci.
  • U sloupců, které jsou obvykle poměrně dlouhé, zvažte jejich komprimaci v klientovi a uložení do BLOB místo TEXT . Většina "textu" se zmenší 3:1. Bloby se odesílají mimo záznam stejně jako texty, ale tyto komprimované bloby by byly menší, a tudíž méně pravděpodobné, že se rozsypou.
  • Proveďte více zpracování v SQL – abyste se vyhnuli vracení všech řádků nebo vracení celého textu atd. Při slepém odesílání velkého množství textu klientovi se síť a klient stávají významným faktorem v uplynulém čase, nejen SELECT , sám.



  1. Index pro získání počtu řádků tabulky PostgreSQL pouze pro čtení (neměnné)?

  2. Migrace z databáze Oracle na MariaDB – co byste měli vědět

  3. SQL pohledy

  4. Nejlepší skupiny na Facebooku pro Analytics, Big Data, Data Mining, Hadoop, NoSQL, Data Science