Mysql
 sql >> база данни >  >> RDS >> Mysql

Недостатък на производителността на композитния първичен ключ в MySQL

INSERT и UPDATE производителността варира малко:тя ще бъде почти същата за (INT) и (INT, INT) ключове.

SELECT изпълнение на съставен PRIMARY KEY зависи от много фактори.

Ако вашата таблица е InnoDB , тогава таблицата е имплицитно групирана в PRIMARY KEY стойност.

Това означава, че търсенето на двете стойности ще бъде по-бързо, ако и двете стойности съдържат ключа:няма да е необходимо допълнително търсене на ключ.

Ако приемем, че вашата заявка е нещо подобно:

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

и оформлението на таблицата е следното:

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

, двигателят просто ще трябва да потърси точната стойност на ключа в самата таблица.

Ако използвате поле за автоматично увеличение като фалшив идентификатор:

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

, тогава двигателят ще трябва първо да търси стойностите на (col1, col2) в индекса ix_mytable_col1_col2 , извличане на показалеца на ред от индекса (стойността на id ) и направете друго търсене чрез id в самата таблица.

За MyISAM таблици обаче, това не прави разлика, защото MyISAM таблиците са организирани в купчина и показалецът на реда е само изместване на файла.

И в двата случая ще бъде създаден един и същ индекс (за PRIMARY KEY или за UNIQUE KEY ) и ще се използва по същия начин.



  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_query в масив?

  2. Моята уеб хостинг компания казва, че нещо не е наред с PHP кода

  3. mysql ПЪЛЕН ТЕКСТ търси няколко думи

  4. Получаване на група по сума и обща сума в една заявка

  5. Как да използвам MySQLdb с Python и Django в OSX 10.6?