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

Какво представлява Big-O за SQL select?

Тъй като не контролирате избрания алгоритъм, няма начин да знаете директно. Въпреки това, без индекси SELECT трябва да бъде O(n) (сканирането на таблица трябва да проверява всеки запис, което означава, че ще се мащабира с размера на таблицата).

С индекс SELECT вероятно е O(log(n)) (въпреки че ще зависи от алгоритъма, използван за индексиране и свойствата на самите данни, ако това е вярно за всяка реална таблица). За да определите вашите резултати за всяка таблица или заявка, трябва да прибегнете до профилиране на данни от реалния свят, за да сте сигурни.

INSERT без индекси трябва да бъде много бърз (близо до O(1)), докато UPDATE трябва първо да намери записите и така ще бъде по-бавен (малко) от SELECT, който ви отвежда до там.

INSERT с индекси вероятно отново ще бъде в полето на O(log(n^2)), когато дървото на индекса трябва да бъде ребалансирано, по-близо до O(log(n)) в противен случай. Същото забавяне ще възникне при АКТУАЛИЗАЦИЯ, ако засяга индексирани редове, в допълнение към разходите за ИЗБЕРЕТЕ.

Всички залози са изключени, след като говорите за ПРИСЪЕДИНЯВАНЕ в микса:ще трябва да направите профил и да използвате инструментите си за оценка на заявки в бази данни, за да го прочетете. Също така имайте предвид, че ако тази заявка е критична за производителността, трябва да повторите профил от време на време, тъй като алгоритмите, използвани от вашия оптимизатор на заявки, ще се променят с промяната на натоварването на данните.

Друго нещо, което трябва да имате предвид... big-O не ви казва за фиксирани разходи за всяка транзакция. За по-малки маси те вероятно са по-високи от действителните разходи за работа. Като пример:разходите за настройка, разрушаване и комуникация на междумрежова заявка за един ред със сигурност ще бъдат повече от търсенето на индексиран запис в малка таблица.

Поради това открих, че възможността да обединя група от свързани заявки в една група може да има значително по-голямо въздействие върху производителността, отколкото всяка оптимизация, която направих на самата база данни.



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

  2. Как да промените часовата зона на MySQL във връзка с база данни с помощта на Java?

  3. MySQL с Sequelize:ER_BAD_DB_ERROR:Неизвестна база данни

  4. php връща недефинирано свойство

  5. Разширена Mysql заявка за получаване на главен запис, ако две условия съвпадат на различни редове дъщерни записи