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

Wada wydajności złożonego klucza podstawowego w MySQL

INSERT i UPDATE wydajność niewiele się różni:będzie prawie taka sama dla (INT) i (INT, INT) klawisze.

SELECT wydajność złożonego PRIMARY KEY zależy od wielu czynników.

Jeśli Twoja tabela to InnoDB , tabela jest niejawnie grupowana na PRIMARY KEY wartość.

Oznacza to, że wyszukiwanie obu wartości będzie szybsze, jeśli obie wartości zawierają klucz:nie będzie wymagane żadne dodatkowe wyszukiwanie kluczy.

Zakładając, że Twoje zapytanie wygląda mniej więcej tak:

SELECT  *
FROM    mytable
WHERE   col1 = @value1
        AND col2 = @value2

a układ tabeli jest następujący:

CREATE TABLE mytable (
        col1 INT NOT NULL,
        col2 INT NOT NULL,
        data VARCHAR(200) NOT NULL,
        PRIMARY KEY pk_mytable (col1, col2)
) ENGINE=InnoDB

, silnik będzie musiał po prostu wyszukać dokładną wartość klucza w samej tabeli.

Jeśli używasz pola autoinkrementacji jako fałszywego identyfikatora:

CREATE TABLE mytable (
        id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
        col1 INT NOT NULL,
        col2 INT NOT NULL,
        data VARCHAR(200) NOT NULL,
        UNIQUE KEY ix_mytable_col1_col2 (col1, col2)
) ENGINE=InnoDB

, silnik będzie musiał najpierw wyszukać wartości (col1, col2) w indeksie ix_mytable_col1_col2 , pobierz wskaźnik wiersza z indeksu (wartość id ) i wykonaj kolejne wyszukiwanie według id w samej tabeli.

Dla MyISAM tabele jednak nie ma to znaczenia, ponieważ MyISAM tabele są zorganizowane na stercie, a wskaźnik wiersza jest po prostu przesunięciem pliku.

W obu przypadkach zostanie utworzony ten sam indeks (dla PRIMARY KEY lub dla UNIQUE KEY ) i będą używane w ten sam sposób.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GROUP BY zwraca pierwszy rekord

  2. Jak napisać bezpieczne porównanie o wartości null <=> w czystym SQL?

  3. Jak uzyskać nazwy wszystkich kolumn dla wszystkich tabel w MySQL?

  4. Jaki jest najlepszy sposób na połączenie się z bazą danych Mysql w Delphi?

  5. Zainstaluj procedurę składowaną w wielu bazach danych