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

kara wydajności ciągów jako kluczy podstawowych?

DB musi utrzymywać B-drzewo (lub podobnej konstrukcji) z kluczem w taki sposób, aby je uporządkować.

Jeśli klucz jest zahaszowany i zapisany w B-Tree, dobrze byłoby szybko sprawdzić unikalność klucza — klucz nadal może być sprawnie wyszukiwany. Ale nie będziesz w stanie skutecznie wyszukiwać zakresu danych (np. z LIKE ), ponieważ B-Tree nie jest już uporządkowane zgodnie z wartością String.

Myślę więc, że większość DB naprawdę przechowuje String w B-Tree, co może (1) zajmować więcej miejsca niż wartości liczbowe i (2) wymagają, aby B-Tree było ponownie zbalansowane jeśli klucze są wstawiane w dowolnej kolejności (brak pojęcia zwiększania wartości jak w przypadku numerycznego pk).

Kara w praktyce może wahać się od nieznacznego do ogromnego. Wszystko zależy od użycia, liczby wierszy, średniej wielkości klucza string, zapytań dołączających do tabeli itp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstawianie danych binarnych do MySQL (bez PreparedStatement's)

  2. Błąd krytyczny:nie znaleziono klasy „Swift_smtpTransport” w

  3. MySQL Jak wiele wartości

  4. Porównanie Percona XtraBackup z MySQL Enterprise Backup:część pierwsza

  5. Co to jest INDEKS PRZESTRZENNY i kiedy należy go używać?