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ístoTEXT
. 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.