Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Duża liczba kolumn, wybierz wszystko trwa wiecznie

InnoDB przechowuje „szerokie” tabele w inny sposób. Zamiast umieszczać wszystkie kolumny razem w jednym ciągu (plus narzut, taki jak długość itp.), wykonuje następujące czynności:

  • Jeśli suma wszystkich kolumn w danym wierszu przekroczy około 8 KB, część danych zostanie przeniesiona do innego („niezarejestrowanego”) obszaru przechowywania.
  • Które kolumny są przenoszone poza rekord, zależy od rozmiarów kolumn itp.
  • Szczegóły zależą od ROW_FORMAT wybrany.
  • „Niezarejestrowane” to kolejny blok (lub bloki) 16 KB.
  • Później, wykonując SELECT * (lub przynajmniej pobranie kolumny (kolumn) poza zapisem), musi wykonać kolejne pobranie dysku.

Co robić?

  • Pomyśl o tak wielu kolumnach.
  • Rozważ „partycjonowanie pionowe”, w którym masz inne tabele zawierające wybrany TEXT kolumny. Zaproponuj wybór grup kolumn na podstawie wzorców dostępu w Twojej aplikacji.
  • W przypadku kolumn, które zwykle są dość długie, rozważ skompresowanie ich w kliencie i przechowywanie w BLOB zamiast TEXT . Większość „tekstów” kurczy się 3:1. Bloby są wysyłane poza rekordami, tak samo jak Teksty, jednak te skompresowane bloby byłyby mniejsze, a zatem mniej prawdopodobne, że się rozleją.
  • Wykonaj więcej przetwarzania w SQL — aby uniknąć zwracania wszystkich wierszy, aby uniknąć zwracania pełnego tekstu itp. Kiedy na ślepo przepychasz dużą ilość tekstu do klienta, sieć i klient stają się istotnym czynnikiem w upływającym czasie, nie tylko SELECT , sam.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. last_insert_id() a SELECT Max (ID)

  2. Porównanie dwóch zakresów dat w tej samej tabeli

  3. Naruszenie spójności MySQL GTID

  4. Przesyłanie obrazu do bazy danych MySQL za pomocą obiektu Blob

  5. Użyć BLOB lub VARBINARY dla zaszyfrowanych danych w MySQL?