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

Jak wybrać zoptymalizowane typy danych dla kolumn [specyficzne dla innodb]?

Krótkie podsumowanie:

(tylko moje opinie)

  1. dla adresu e-mail — VARCHAR(255)
  2. dla nazwy użytkownika — VARCHAR(100) lub VARCHAR(255)
  3. dla id_username - użyj INT (chyba że planujesz ponad 2 miliardy użytkowników w swoim systemie)
  4. numery telefonów — INT lub VARCHAR a może CHAR (zależy od tego, czy chcesz przechowywać formatowanie)
  5. posty — TEXT
  6. daty — DATE lub DATETIME (zdecydowanie uwzględnij czas na takie rzeczy jak posty lub e-maile)
  7. pieniądze - DECIMAL(11,2)
  8. różne - patrz poniżej

Jeśli chodzi o używanie InnoDB, ponieważ VARCHAR ma być szybsza, nie przejmowałbym się tym, ani ogólnie szybkością. Użyj InnoDB, ponieważ musisz wykonywać transakcje i/lub chcesz użyć ograniczeń klucza obcego (FK) w celu zapewnienia integralności danych. Ponadto InnoDB używa blokowania na poziomie wiersza, podczas gdy MyISAM używa tylko blokowania na poziomie tabeli. Dlatego InnoDB lepiej radzi sobie z wyższymi poziomami współbieżności niż MyISAM. Użyj MyISAM, aby korzystać z indeksów pełnotekstowych i nieco mniej narzutu.

Co ważniejsze dla szybkości niż typ silnika:umieść indeksy w kolumnach, które chcesz szybko przeszukać. Zawsze umieszczaj indeksy w kolumnach ID/PK, takich jak nazwa_użytkownika, o której wspomniałem.

Więcej szczegółów:

Oto kilka pytań dotyczących typów danych MySQL i projektowania baz danych (ostrzeżenie, więcej niż prosiłeś):

I kilka pytań, kiedy używać silnika InnoDB:

Po prostu używam tinyint za prawie wszystko (poważnie).

Edytuj – Jak przechowywać „posty”:

Poniżej znajduje się kilka linków z dodatkowymi szczegółami, ale oto krótka wersja. Do przechowywania „postów” potrzebujesz miejsca na długi ciąg tekstowy. CHAR maksymalna długość to 255, więc to nie jest opcja i oczywiście CHAR zmarnowałby nieużywane znaki w porównaniu z VARCHAR , który ma zmienną długość CHAR .

Przed MySQL 5.0.3 VARCHAR maksymalna długość to 255, więc zostaniesz z TEXT . Jednak w nowszych wersjach MySQL możesz użyć VARCHAR lub TEXT . Wybór sprowadza się do preferencji, ale jest kilka różnic. VARCHAR i TEXT maksymalna długość wynosi teraz 65,535, ale możesz ustawić własną wartość maksymalną na VARCHAR . Powiedzmy, że myślisz, że Twoje posty będą musiały mieć maksymalnie 2000, możesz ustawić VARCHAR(2000) . Jeśli za każdym razem osiągniesz limit, możesz ALTER później stół i wrzuć go do VARCHAR(3000) . Z drugiej strony TEXT faktycznie przechowuje swoje dane w BLOB (1). Słyszałem, że mogą występować różnice w wydajności między VARCHAR i TEXT , ale nie widziałem żadnego dowodu, więc możesz chcieć przyjrzeć się temu dokładniej, ale zawsze możesz zmienić ten drobny szczegół w przyszłości.

Co ważniejsze, przeszukiwanie tej kolumny „post” przy użyciu indeksu pełnotekstowego zamiast LIKE byłoby znacznie szybsze (2). Jednak musisz użyć silnika MyISAM, aby użyć indeksu pełnotekstowego, ponieważ InnoDB go nie obsługuje . W bazie danych MySQL możesz mieć heterogeniczną mieszankę silników dla każdej tabeli, więc wystarczy, że Twoja tabela „posts” będzie używała MyISAM. Jeśli jednak absolutnie potrzebujesz „postów”, aby korzystać z InnoDB (dla transakcji), skonfiguruj wyzwalacz, aby zaktualizować kopię MyISAM twojej tabeli „posts” i użyj kopii MyISAM do wszystkich wyszukiwań pełnotekstowych.

Patrz na dole kilka przydatnych cytatów.

Na koniec, oto świetny post o zaletach i wadach VARCHAR kontra TEXT. Odnosi się to również do problemu z wydajnością:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak używać ON DUPLICATE KEY UPDATE w moim modelu CodeIgniter?

  2. Jak zwrócić 0 zamiast null podczas używania COUNT w MySQL?

  3. MySQL C++ Connector:niezdefiniowane odniesienie do `get_driver_instance'

  4. Nie można wydać instrukcji manipulacji danymi za pomocą executeQuery()

  5. mysql order by rand() problem z wydajnością i rozwiązanie