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

Dlaczego zmiana z utf8 na utf8mb4 spowolniła moją bazę danych?

UTF to tak naprawdę utfmb3 i może używać maksymalnie 3 bajtów na znak, podczas gdy utfmb4 może używać 4 bajtów na znak. W przypadku kolumn VARCHAR zwykle nie ma to dużej różnicy, ponieważ MySQL będzie przechowywać tylko tyle bajtów, ile potrzeba (chyba że utworzyłeś tabele MyISAM z ROW_FORMAT=FIXED).

Jednak podczas wykonywania zapytania MySQL może tworzyć tymczasowe tabele w mechanizmie przechowywania MEMORY, który nie obsługuje wierszy o zmiennej długości. Te tabele tymczasowe mają maksymalny rozmiar i jeśli ten rozmiar zostanie przekroczony, tabele tymczasowe zostaną przekonwertowane na tabele w MyISAM/InnoDB (w zależności od wersji MySQL). Zmienna stanu Created_tmp_disk_tables będzie zwiększany za każdym razem, gdy to się stanie. Jeśli tak, spróbuj sprawdzić, czy pomaga zwiększyć wartość max_heap_table_size i tmp_table_size .

Alternatywnie, uaktualnij do MySQL 8.0, gdzie nowy mechanizm przechowywania obsługujący wiersze o zmiennej długości jest używany do wewnętrznych tabel tymczasowych.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Efektywne łączenie zakresów interwałowych w SQL

  2. Grupa MySQL według kolejnych wierszy

  3. Mysql WHERE problem z listą oddzieloną przecinkami

  4. Jaka jest różnica wydajności w implementacjach podziału relacyjnego MySQL (IN AND zamiast IN OR)?

  5. gdzie 1=1 stwierdzenie