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

Czy unikalne indeksy są lepsze dla wydajności wyszukiwania kolumn? (PGSQL i MySQL)

Jeśli Twoje dane są unikalne, powinieneś utworzyć UNIKALNY indeksuj je.

Nie oznacza to żadnych dodatkowych narzutów i wpływa na decyzje optymalizatora w niektórych przypadkach, dzięki czemu może on wybrać lepszy algorytm.

W SQL Server oraz w PostgreSQL , na przykład, jeśli sortujesz według UNIKALNEGO klucz, optymalizator ignoruje ORDER BY klauzule użyte po tym (ponieważ są nieistotne), ja. mi. to zapytanie:

SELECT  *
FROM    mytable
ORDER BY
        col_unique, other_col
LIMIT 10

użyje indeksu na col_unique i nie będzie sortować według other_col ponieważ jest bezużyteczny.

To zapytanie:

SELECT  *
FROM    mytable
WHERE   mycol IN
        (
        SELECT  othercol
        FROM    othertable
        )

zostanie również przekonwertowany na INNER JOIN (w przeciwieństwie do SEMI JOIN ) jeśli istnieje UNIKALNY indeks na othertable.othercol .

Indeks zawsze zawiera jakiś wskaźnik do wiersza (ctid w PostgreSQL , wskaźnik wiersza w MyISAM , klucz podstawowy/unikyfikator w InnoDB ), a liście są uporządkowane według tych wskaźników, więc w rzeczywistości każdy liść indeksu jest w jakiś sposób unikalny (choć może to nie być oczywiste).

Zobacz ten artykuł na moim blogu, aby uzyskać szczegółowe informacje na temat 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. Moduł Pythona MySQL

  2. Szukaj z wartością oddzieloną przecinkami mysql

  3. SQLAlchemy/MySQL Utracono połączenie z serwerem MySQL podczas zapytania

  4. zend framework połącz 3 stoły

  5. PHP MySQL INSERT nie powiedzie się z powodu unikalnego ograniczenia