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

Czy MySQL używa istniejących indeksów przy tworzeniu nowych indeksów?

Nie, nie będzie.

Teoretycznie indeks na (site, product, value, id) ma wszystko, co jest wymagane do zbudowania indeksu na dowolnym podzbiorze tych pól (w tym indeksy na (product, value, id) i (value, id) ).

Jednak budowanie indeksu z indeksu dodatkowego nie jest obsługiwane.

Najpierw MySQL nie obsługuje szybkiego pełnego skanowania indeksu (czyli skanowania indeksu w kolejności fizycznej, a nie logicznej), przez co ścieżka dostępu do indeksu jest droższa niż odczyt tabeli. To nie jest problem dla InnoDB , ponieważ sama tabela jest zawsze zgrupowana.

Po drugie, kolejność rekordów w tych indeksach jest zupełnie inna, więc rekordy i tak muszą być posortowane.

Jednak główny problem z szybkością tworzenia indeksu w MySQL jest to, że generuje zamówienie na miejscu (wystarczy wstawić rekordy jeden po drugim do B-Tree ) zamiast używania wstępnie posortowanego źródła. Jak wspomniał @Daniel, szybkie tworzenie indeksów rozwiązuje ten problem. Jest dostępny jako wtyczka do 5.1 i jest preinstalowany w 5.5 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql INSERT IGNORE jeśli konkretne wartości wierszy w dwóch kolumnach już istnieją

  2. dynamiczny wybór nazw kolumn w MySql

  3. Rejestracja użytkownika i weryfikacja poczty e-mail PHP i MySQL

  4. Nieprawidłowa wartość DateTime '0000-00-00 00:00:00' — Date_Sub() w posiadaniu

  5. zapytanie mysql, aby znaleźć wszystkie możliwe kombinacje zaczynające się od i kończące się na (duplikat uproszczony)