Jaki jest górny limit rekordów dla tabeli bazy danych MySQL. Zastanawiam się nad polem autoincrement. Co by się stało, gdybym dodał miliony rekordów? Jak radzić sobie w tego typu sytuacjach? Dzięki!
Jaki jest górny limit rekordów dla tabeli bazy danych MySQL. Zastanawiam się nad polem autoincrement. Co by się stało, gdybym dodał miliony rekordów? Jak radzić sobie w tego typu sytuacjach? Dzięki!
Odpowiedzi:
typy mysql int mogą zrobić całkiem sporo wierszy: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html
unsigned int
największa wartość jest 4,294,967,295
niepodpisany bigint
największa wartość jest18,446,744,073,709,551,615
Największa wartość liczby całkowitej ma niewiele wspólnego z maksymalną liczbą wierszy, które można przechowywać w tabeli.
Prawdą jest, że jeśli używasz int lub bigint jako klucza podstawowego, możesz mieć tylko tyle wierszy, ile wynosi liczba unikatowych wartości w typie danych klucza podstawowego, ale nie musisz określać swojego klucza podstawowego liczbą całkowitą , możesz uczynić to CHAR (100). Możesz również zadeklarować klucz podstawowy w więcej niż jednej kolumnie.
Oprócz liczby wierszy istnieją inne ograniczenia dotyczące rozmiaru tabeli. Na przykład możesz użyć systemu operacyjnego, który ma ograniczenie rozmiaru pliku. Lub możesz mieć dysk twardy o pojemności 300 GB, który może pomieścić tylko 300 milionów wierszy, jeśli każdy wiersz ma rozmiar 1 KB.
Limity rozmiaru bazy danych są naprawdę wysokie:
http://dev.mysql.com/doc/refman/5.1/en/source-configuration-options.html
Silnik pamięci masowej MyISAM obsługuje 2 32 wiersze na tabelę, ale można zbudować MySQL z --with-big-tables
opcją obsługi do 2 64 wierszy na tabelę.
http://dev.mysql.com/doc/refman/5.1/en/innodb-restrictions.html
Wydaje się, że silnik magazynu InnoDB nie ma ograniczenia liczby wierszy, ale ma ograniczenie rozmiaru tabeli do 64 terabajtów. To, ile rzędów pasuje do tego, zależy od wielkości każdego rzędu.
Sugeruję, aby nigdy nie usuwać danych. Nie mów, że jeśli tabele są dłuższe niż 1000, obetnij koniec tabeli. Twój plan musi zawierać prawdziwą logikę biznesową, taką jak czas nieaktywności tego użytkownika. Na przykład, jeśli jest dłuższy niż 1 rok, umieść je w innej tabeli. Miałbyś to co tydzień lub co miesiąc w skrypcie konserwacyjnym w środku wolnego czasu.
Kiedy napotkasz wiele wierszy w swojej tabeli, powinieneś zacząć dzielić tabele na fragmenty lub partycjonować i umieszczać stare dane w starych tabelach według roku, np. Users_2011_jan, users_2011_feb, lub użyć liczb dla miesiąca. Następnie zmień programowanie, aby pracować z tym modelem. Może utworzyć nową tabelę z mniejszą ilością informacji, aby podsumować dane w mniejszej liczbie kolumn, a następnie odwołać się do większych tabel podzielonych na partycje tylko wtedy, gdy potrzebujesz więcej informacji, na przykład gdy użytkownik przegląda swój profil. Wszystko to należy bardzo uważnie rozważyć, aby w przyszłości ponowne uwzględnienie nie było zbyt kosztowne. Możesz również umieścić w jednej tabeli tylko użytkowników, którzy cały czas odwiedzają Twoją witrynę, oraz użytkowników, którzy nigdy nie pojawią się w zarchiwizowanym zestawie tabel.
W InnoDB, z ograniczeniem rozmiaru tabeli do 64 terabajtów i limitem rozmiaru wiersza MySQL 65 535, może istnieć 1 073 741 824 wierszy. Byłaby to minimalna liczba rekordów wykorzystujących maksymalny rozmiar wiersza. Jednak można dodać więcej rekordów, jeśli rozmiar wiersza jest mniejszy.
Zgodnie z sekcją Scalability and Limits w http://dev.mysql.com/doc/refman/5.6/en/features.html , obsługa MySQL dla dużych baz danych. Korzystają z serwera MySQL z bazami danych, które zawierają 50 milionów rekordów. Niektórzy użytkownicy używają serwera MySQL z 200 000 tabel i około 5 000 000 000 wierszy.
The maximum row size for a given table is determined by several factors:
Wewnętrzna reprezentacja tabeli MySQL ma maksymalny rozmiar wiersza 65 535 bajtów, nawet jeśli silnik pamięci masowej może obsługiwać większe wiersze. Kolumny BLOB i TEXT wnoszą tylko 9 do 12 bajtów w kierunku limitu rozmiaru wiersza, ponieważ ich zawartość jest przechowywana oddzielnie od reszty wiersza.
Maksymalny rozmiar wiersza dla tabeli InnoDB, który dotyczy danych przechowywanych lokalnie na stronie bazy danych, to nieco mniej niż połowa strony. Na przykład maksymalny rozmiar wiersza jest nieco mniejszy niż 8 KB dla domyślnego rozmiaru strony InnoDB 16 KB, który jest zdefiniowany w opcji konfiguracyjnej innodb_page_size. „ Ograniczenia dotyczące tabel InnoDB ”.
Link http://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html
Limity wielkości wierszy
Maksymalny rozmiar wiersza dla danej tabeli zależy od kilku czynników:
Wewnętrzna reprezentacja tabeli MySQL ma maksymalny rozmiar wiersza 65 535 bajtów, nawet jeśli silnik pamięci masowej może obsługiwać większe wiersze. Kolumny BLOB i TEXT wnoszą tylko 9 do 12 bajtów w kierunku limitu rozmiaru wiersza, ponieważ ich zawartość jest przechowywana oddzielnie od reszty wiersza.
Maksymalny rozmiar wiersza dla tabeli InnoDB, który ma zastosowanie do danych przechowywanych lokalnie na stronie bazy danych, to nieco mniej niż połowa strony dla ustawień 4 KB, 8 KB, 16 KB i 32 KB innodb_page_size. Na przykład maksymalny rozmiar wiersza jest nieco mniejszy niż 8 KB dla domyślnego rozmiaru strony InnoDB 16 KB. W przypadku stron o rozmiarze 64 KB maksymalny rozmiar wiersza jest nieco mniejszy niż 16 KB. Zobacz Sekcja 15.8.8, „Ograniczenia tabel InnoDB”.
Jeśli wiersz zawierający kolumny o zmiennej długości przekracza maksymalny rozmiar wiersza InnoDB, InnoDB wybiera kolumny o zmiennej długości do zewnętrznego przechowywania poza stroną, dopóki wiersz nie zmieści się w limicie rozmiaru wiersza InnoDB. Ilość danych przechowywanych lokalnie dla kolumn o zmiennej długości, które są przechowywane poza stroną, różni się w zależności od formatu wiersza. Aby uzyskać więcej informacji, zobacz Sekcja 15.11, „Przechowywanie wierszy i formaty wierszy w InnoDB”.
Różne formaty przechowywania używają różnych ilości danych nagłówka strony i zakończenia, co wpływa na ilość pamięci dostępnej dla wierszy.
Więcej informacji na temat formatów wierszy InnoDB można znaleźć w sekcji 15.11, „Przechowywanie wierszy i formaty wierszy InnoDB” oraz w sekcji 15.8.3, „Fizyczna struktura wierszy tabel InnoDB”.
Aby uzyskać informacje na temat formatów pamięci MyISAM, zobacz Sekcja 16.2.3, „Formaty pamięci MyISAM Table”.
http://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html
Tu nie ma limitu. Zależy to tylko od ilości wolnej pamięci i maksymalnego rozmiaru pliku w systemie. Ale to nie znaczy, że nie powinieneś podejmować środków ostrożności w radzeniu sobie z zużyciem pamięci w bazie danych. Zawsze twórz skrypt, który może usuwać nieużywane wiersze lub utrzymywać całkowitą liczbę wierszy w ramach określonej liczby, powiedzmy tysiąc.