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

Каква е цената на индексирането на множество db колони?

Индексирайте това, което изглежда най-логично (надявам се, че това трябва да е очевидно, например колона с идентификационен номер на клиента в таблицата CUSTOMERS).

След това стартирайте приложението си и събирайте периодично статистически данни, за да видите как се представя базата данни. RUNSTATS на DB2 е един пример, надявам се, че MySQL има подобен инструмент.

Когато откриете, че някои често изпълнявани заявки извършват пълно сканиране на таблицата (или отнемат твърде много време поради други причини), тогава и само тогава , трябва ли да добавите още индекси. Няма голяма полза от оптимизиране на заявка за изпълнение веднъж месечно в полунощ, така че да може да завърши в 12:05 вместо в 12:07. Въпреки това е огромно подобрение да намалите заявката, насочена към клиента от 5 секунди на 2 секунди (това все още е твърде бавно, заявките, насочени към клиента, трябва да са на по-малко от секунда, ако е възможно).

Повече индекси са склонни да забавят вмъкването и ускоряват заявките. Така че винаги е балансиращ акт. Ето защо добавяте индекси само в специфичен отговор на проблем. Всичко друго е преждевременна оптимизация и трябва да се избягва.

Освен това периодично преглеждайте индексите, които вече имате, за да видите дали все още са необходими. Може да се окаже, че заявките, които са ви накарали да добавите тези индекси, вече не се изпълняват достатъчно често, за да оправдаят това.

Честно казано, не вярвам, че индексирането на три колони в таблица ще ви накара да страдате, освен ако не планирате да съхранявате наистина огромен брой редове :-) - индексирането е доста ефективно.

След вашата редакция, която гласи:

Моят отговор е, че 200 записа на ден е изключително малка стойност за база данни, определено няма да имате за какво да се притеснявате с тези три индекса.

Само тази седмица импортирах транзакции за дни в една от нашите таблици на база данни на работа и тя съдържаше 2,1 милиона записа (получаваме поне една транзакция в секунда през целия ден от 25 отделни машини). И има четири отделни композитни клавиша, което е малко по-интензивно от вашите три отделни клавиша.

Разбира се, това е в DB2 база данни, но не мога да си представя, че IBM са така много по-добре от хората на MySQL, че MySQL може да се справи само с по-малко от 0,01% от натоварването на DB2.



  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 за конкатенация на низове в MySQL?

  2. запазване на java LocalDate в MySQL

  3. MYSQL - Конкатениране на две таблици

  4. Кой е най-добрият начин за връщане на enum стойности в MySQL?

  5. показване на таблици с подобно използване на Java и MySQL?