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

MySQL 5.0 индекси – уникални срещу неуникални

UNIQUE и PRIMARY KEY са ограничения , а не индекси. Въпреки че повечето бази данни прилагат тези ограничения чрез използване на индекс. Допълнителните допълнителни разходи на ограничението в допълнение към индекса са незначителни, особено когато преброите разходите за проследяване и коригиране на неволни дубликати, когато (не ако) се появят.

Индексите обикновено са по-ефективни, ако имате висока селективност . Това е съотношението на броя на отделните стойности към общия брой редове.

Например в колона за социалноосигурителен номер може да имате 1 милион реда с 1 милион различни стойности. Така че селективността е 1000000/1000000 =1.0 (въпреки че има редки исторически изключения, SSN са предназначени да бъдат уникални).

Но друга колона в тази таблица, "пол" може да има само две различни стойности над 1 милион реда. 2/1000000 =много ниска селективност.

Индекс с ограничение UNIQUE или PRIMARY KEY е гарантирано, че има селективност от 1.0, така че винаги ще бъде толкова ефективен, колкото може да бъде индексът.

Попитахте за разликата между първичен ключ и уникално ограничение. Основно е, че можете да имате само едно ограничение за първичен ключ на таблица (дори ако дефиницията на това ограничение включва множество колони), докато можете да имате множество уникални ограничения. Колона с уникално ограничение може да разрешава NULL, докато колоните в ограниченията на първичния ключ не трябва да разрешават NULL. В противен случай първичният ключ и уникалният ключ са много сходни в изпълнението и използването им.

Попитахте в коментар дали да използвате MyISAM или InnoDB. В MySQL те използват термина движка за съхранение . Има куп фини разлики между тези две машини за съхранение, но основните са:

  • InnoDB поддържа транзакции, така че можете да изберете да връщате назад или да извършвате промени. MyISAM на практика винаги е автоматично завършване.
  • InnoDB налага ограничения на външния ключ. MyISAM не налага и дори не съхранява ограничения на външния ключ.

Ако тези функции са неща, от които се нуждаете във вашето приложение, тогава трябва да използвате InnoDB.

Да отговоря на вашия коментар, не е толкова просто. InnoDB всъщност е по-бърз от MyISAM в доста случаи, така че зависи от това каква комбинация от селекти, актуализации, едновременни заявки, индекси, конфигурация на буфера и т.н. в приложението ви.

Вижте http:/ /www.mysqlperformanceblog.com/2007/01/08/innodb-vs-myisam-vs-falcon-benchmarks-part-1/ за много задълбочено сравнение на производителността на двигателите за съхранение. InnoDB печели MyISAM достатъчно често, че очевидно не е възможно да се каже, че единият е по-бърз от другия.

Както при повечето въпроси, свързани с производителността, единственият начин да отговорите за вашето приложение е да тествате и двете конфигурации с помощта на вашето приложение и представителна извадка от данни и да измервате резултатите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP PDO Mysql Insert Performance

  2. Как да използвам Regexp в MySQL Replace Commands?

  3. Грешка в MySQL 1215:Не може да се добави ограничение за външен ключ

  4. Пагинация в nodejs с mysql

  5. Емулирайте MySQL LIMIT клауза в Microsoft SQL Server 2000