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

Mysql таблица със съставен индекс, но не първичен ключ

Няколко точки:

Изглежда, че просто използвате това, което в момента е уникално за таблицата и го правите като първичен ключ. Това работи. А естествените ключове имат някои предимства, когато става въпрос за запитване поради локалност. (Данните за всеки потребител се съхраняват в една и съща област). И тъй като таблицата е групирана от този ключ, който елиминира търсенето на данните, ако търсите по колоните в основния.

  1. Но използването на естествен първичен ключ, както сте избрали, има и недостатъци за производителността.

  2. Използването на много голям първичен ключ ще направи всички други индекси много големи в innodb, тъй като първичният ключ е включен във всяка стойност на индекса.

  3. Използването на естествен първичен ключ не е толкова бързо, колкото сурогатен ключ за INSERT, защото освен че е по-голям, той не може просто да се вмъква в края на таблицата всеки път. Трябва да се вмъкне в секцията за този потребител и публикация и т.н.

  4. Освен това, ако търсите по време, най-вероятно ще търсите по цялата таблица с естествен ключ, освен ако времето не е първата ви колона. Сурогатните ключове обикновено са локални за времето и често могат да бъдат подходящи за някои заявки.

  5. Използването на естествен ключ като вашия като първичен ключ също може да бъде досадно. Ами ако искате да се позовавате на конкретен вот? Трябват ви няколко полета. Също така е малко трудно да се използва с много ORM.

Ето отговор

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

ALTER TABLE tbl_rate 
ADD id INT UNSIGNED NOT NULL AUTO_INCREMENT, 
ADD PRIMARY KEY(id);

Но ако създадете сурогатен първичен ключ, бих направил и вашия ключ УНИКАЛЕН. Същата цена, но налага коректност.

ALTER TABLE tbl_rate 
ADD UNIQUE ( user_id, post_id, type );


  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 по възходящо и низходящо сортиране

  2. Предупреждение:mysql_fetch_array():предоставеният аргумент не е валиден ресурс за MySQL резултат

  3. Намерете класирането на цяло число в mysql

  4. PHP грешка:Извикване на функция-член rowCount() на необект

  5. MySQL - Как да развъртите колони към редове?