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

Wydajność MySQL:jak wykorzystać indeksowanie bazy danych MySQL

W tym samouczku omówimy niektóre z podstaw indeksowania. W ramach serii MySQL przedstawimy możliwości indeksowania MySQL oraz rolę, jaką odgrywa w optymalizacji wydajności bazy danych. Liquid Web zaleca konsultację z DBA przed wprowadzeniem jakichkolwiek zmian w aplikacji na poziomie produkcyjnym.

Co to jest indeksowanie?

Indeksowanie to potężna struktura w MySQL, którą można wykorzystać do uzyskania najkrótszych czasów odpowiedzi z typowych zapytań. Zapytania MySQL osiągają wydajność, generując mniejszą tabelę, zwaną indeksem, z określonej kolumny lub zestawu kolumn. Te kolumny, zwane kluczami, mogą służyć do wymuszania unikalności. Poniżej znajduje się prosta wizualizacja przykładowego indeksu przy użyciu dwóch kolumn jako klucza.

+------+----------+----------+
| ROW | COLUMN_1 | COLUMN_2 |
+------+----------+----------+
| 1 | data1 | data2 |
+------+----------+----------+
| 2 | data1 | data1 |
+------+----------+----------+
| 3 | data1 | data1 |
+------+----------+----------+
| 4 | data1 | data1 |
+------+----------+----------+
| 5 | data1 | data1 |
+------+----------+----------+

Zapytania wykorzystują indeksy do identyfikowania i pobierania danych docelowych, nawet jeśli są kombinacją kluczy. Bez indeksu uruchomienie tego samego zapytania spowoduje sprawdzenie każdego wiersza pod kątem potrzebnych danych. Indeksowanie tworzy skrót, z dużo krótszymi czasami zapytań w obszernych tabelach. Analogia do podręczników może dostarczyć innego popularnego sposobu na zobrazowanie funkcjonowania indeksów.

Kiedy włączyć indeksowanie?

Indeksowanie jest korzystne tylko w przypadku dużych tabel z regularnie dostępnymi informacjami. Na przykład, kontynuując naszą analogię z podręcznikiem, nie ma sensu indeksować bajki dla dzieci, która ma tylko kilkanaście stron. Bardziej efektywne jest po prostu przeczytanie książki w celu znalezienia każdego wystąpienia słowa „żółw” niż konfigurowanie i utrzymywanie indeksów, wykonywanie zapytań o te indeksy, a następnie przeglądanie każdej dostarczonej strony. W świecie komputerów te dodatkowe zadania związane z indeksowaniem reprezentują zmarnowane zasoby, które lepiej byłoby wykorzystać, gdyby nie indeksowanie.

Bez indeksów, gdy tabele rozrastają się do ogromnych rozmiarów, czasy odpowiedzi cierpią z powodu zapytań skierowanych do tych rozwartych tabel. Nieefektywne zapytania objawiają się opóźnieniami w działaniu aplikacji lub witryny. Często identyfikujemy to opóźnienie, używając funkcji powolnego dziennika zapytań MySQL. Więcej informacji na temat korzystania z funkcji powolnego dziennika zapytań można znaleźć w pierwszym artykule z tej serii:Wydajność MySQL:Identyfikowanie długich zapytań.
Gdy olbrzymia tabela osiągnie punkt krytyczny, może spowodować przestój aplikacji i witryn internetowych . Przeprowadzanie rutynowych ocen dla rosnącej bazy danych zapewnia optymalną wydajność bazy danych i omija nieodłączne przerwy w długich zapytaniach.

Wady i zalety indeksowania MySQL

Korzystanie z indeksowania MySQL ma swoje zalety i wady, a my omówimy istotne zalety i wady do rozważenia. Te aspekty pomogą Ci zdecydować, czy indeksowanie jest odpowiednim wyborem w Twojej sytuacji.

Jakie informacje jeden indeksuje?

Wybór elementów do indeksowania jest prawdopodobnie najtrudniejszą częścią indeksowania baz danych. Ustalenie, co jest na tyle ważne, aby indeksować, a co jest na tyle łagodne, aby nie indeksować. Ogólnie rzecz biorąc, indeksowanie działa najlepiej w tych kolumnach, które są przedmiotem klauzul WHERE w często wykonywanych zapytaniach. Rozważ poniższą uproszczoną tabelę:

ID, TITLE, LAST_NAME, FIRST_NAME, MAIDEN_NAME, DOB, GENDER, AGE, DESCRIPTION, HISTORY, ETC...

Jeśli Twoje zapytania polegają na testowaniu klauzuli WHERE przy użyciu LAST_NAME i FIRST_NAME, indeksowanie według tych dwóch kolumn znacznie wydłużyłoby czas odpowiedzi na zapytanie. Alternatywnie, jeśli Twoje zapytania opierają się na prostym wyszukiwaniu identyfikatorów, lepszym wyborem będzie indeksowanie według identyfikatora.

Te przykłady są jedynie podstawowymi przykładami, aw MySQL istnieje kilka rodzajów struktur indeksowania. Poniższa strona MySQL omawia te typy indeksów bardziej szczegółowo, a także polecana lektura dla każdego, kto rozważa indeksowanie:Jak MySQL używa indeksów

Co to jest unikalny indeks?

Inną kwestią do rozważenia podczas oceny kolumn, które mają służyć jako klucz w indeksie, jest użycie ograniczenia UNIQUE. Ustawienie ograniczenia UNIQUE wymusi unikalność na podstawie skonfigurowanego klucza indeksowania. Jak każdy klucz, może to być pojedyncza kolumna lub połączenie wielu kolumn. Funkcja tego ograniczenia zapewnia, że ​​nie ma zduplikowanych wpisów w tabeli na podstawie skonfigurowanego klucza.

Co to jest indeks klucza podstawowego?

KLUCZ PODSTAWOWY, tak często wywoływany jak ograniczenie UNIQUE, służy do optymalizacji indeksów. To ograniczenie gwarantuje, że wyznaczony klucz podstawowy nie może mieć wartości null. W rezultacie wzrost wydajności występuje podczas uruchamiania na silniku pamięci masowej InnoDB dla danej tabeli. Ten wzrost wynika z tego, jak InnoDB fizycznie przechowuje dane, umieszczając w kluczu wiersze o wartości null poza ciągłą sekwencją z wierszami, które mają wartości. Włączenie tego ograniczenia zapewnia, że ​​wiersze tabeli są utrzymywane w ciągłym porządku, co zapewnia szybsze odpowiedzi.

Zarządzanie indeksami

Teraz omówimy niektóre podstawy manipulowania indeksami przy użyciu składni MySQL. W przykładach uwzględnimy tworzenie, usuwanie i wyświetlanie indeksów. Pamiętaj, że te przykłady zawierają wpisy zastępcze dla określonych słów kluczowych. Te słowa kluczowe są z natury oczywiste, co ułatwia czytanie, a poniżej znajduje się ich zarys.

Wyświetlanie/pokazywanie indeksów

Tabele mogą mieć wiele indeksów. Zarządzanie indeksami nieuchronnie będzie wymagało możliwości wylistowania istniejących indeksów w tabeli. Składnia do przeglądania indeksu znajduje się poniżej.

SHOW INDEX FROM tableName;

Tworzenie indeksów

Tworzenie indeksu ma prostą składnię. Trudność polega na określeniu, które kolumny wymagają indeksowania i czy wymuszanie unikalności jest konieczne. Poniżej zilustrujemy, jak tworzyć indeksy z ograniczeniami PRIMARY KEY i UNIQUE oraz bez nich.

Jak wspomniano wcześniej, tabele mogą mieć wiele indeksów. Indeksowanie wielokrotne jest przydatne do tworzenia indeksów dostosowanych do zapytań wymaganych przez aplikację lub witrynę internetową. Domyślne ustawienia pozwalają na do 16 indeksów na tabelę, zwiększają tę liczbę, ale generalnie jest to więcej niż jest to konieczne. Indeksy można tworzyć podczas tworzenia tabeli lub dodawać do niej później jako dodatkowe indeksy. Poniżej omówimy obie metody.

Przykład:Utwórz tabelę ze standardowym indeksem

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
INDEX ( ID )
);

Przykład:Utwórz tabelę z unikalnym indeksem i kluczem podstawowym

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
PRIMARY KEY (ID),
UNIQUE INDEX ( ID )
);

Przykład:dodaj indeks do istniejącej tabeli

CREATE INDEX indexName ON tableName (ID, LName, FName, LOC);

Przykład:dodaj indeks do istniejącej tabeli z kluczem podstawowym

CREATE UNIQUE INDEX indexName ON tableName (ID, LName, FName, LOC);

Usuwanie indeksów

Podczas zarządzania indeksami może być konieczne usunięcie niektórych. Usuwanie indeksów jest również bardzo prostym procesem, patrz przykład poniżej:

DROP INDEX indexName ON tableName;

Istnieje wiele sposobów na optymalizację bazy danych pod kątem rzeczywistej wydajności. Jeśli chcesz dowiedzieć się więcej lub przekonwertować typy wyszukiwarek dostępnych w MySQL, przeczytaj nasz samouczek MyISAM vs. InnoDB. Lub jeśli potrzebujesz dobrze działających baz danych, sprawdź naszą stronę produktu MySQL, aby zobaczyć różne opcje.

Nawigacja po seriach<>

  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 nadać wszystkie uprawnienia użytkownikowi root w MySQL 8.0?

  2. Oblicz percentyl w MySQL na podstawie sum

  3. Praktyki pulowania połączeń JDBC MySql w celu uniknięcia wyczerpania puli połączeń

  4. Czy COUNT(*) zawsze zwraca wynik?

  5. Jakie jest najlepsze rozwiązanie do puli połączeń bazy danych w Pythonie?