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

Има ли сериозен спад в производителността при използване на външни ключове в SQL Server?

Има малък спад в производителността при вмъквания, актуализации и изтривания, защото FK трябва да се провери. За отделен запис това обикновено би било толкова малко, че да бъде незабележимо, освен ако не започнете да имате невероятен брой FK, свързани с масата (Ясно е, че отнема повече време, за да проверите 100 други таблици от 2). Това е нещо добро, а не лошо, тъй като бази данни без целостта са ненадеждни и следователно безполезни. Не трябва да разменяте почтеността за скорост. Този спад в производителността обикновено се компенсира от по-добрата способност за оптимизиране на плановете за изпълнение.

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

FK не се индексират автоматично и ако не са индексирани, това може да причини проблеми с производителността.

Честно казано, бих взел копие на вашата база данни, бих добавил правилно индексирани FK и ще покажа разликата във времето за вмъкване, изтриване, актуализиране и избор от тези таблици в сравнение със същата от вашата база данни без FK. Покажете, че няма да причините удар в производителността. След това покажете резултатите от заявки, които показват осиротели записи, които вече нямат значение, тъй като PK, с който са свързани, вече не съществува. Особено ефективно е да се покаже това за таблици, които съдържат финансова информация („Имаме 2700 поръчки, които не можем да свържем с клиент“ ще накара ръководството да седне и да обърне внимание).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Репликацията на Sql сървър изисква действителното име на сървъра, за да се осъществи връзка със сървъра

  2. Създайте база данни на SQL Server с Azure Data Studio

  3. Сравнете датите в T-SQL, игнорирайки частта от времето

  4. Избройте всички бази данни от свързан сървър в SQL Server (T-SQL примери)

  5. Трикове за непрекъснато подобряване на мониторинга на базата данни