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

CASE производителност в MySQL?

Почти всички функциите на ред ще окажат влияние върху производителността, единственият реален въпрос е:„Достатъчно малко ли е въздействието, за да не се притеснявате?“.

Това е нещо, което трябва да откриете, като измервате, вместо да гадаете. Администрирането на база данни е само дейност за настройване и забравяне, ако нито вашите данни, нито вашите заявки никога не се променят. В противен случай трябва периодично да наблюдавате производителността, за да сте сигурни, че няма да възникнат проблеми.

Под „достатъчно малък“ в горните коментари имам предвид, че вероятно няма нужда да се притеснявате за въздействието върху производителността на нещо като:

select * from friends where lowercase(lastname) = "smith"

ако имате само трима приятели.

Въздействието на тези неща става по-сериозно с увеличаването на размера на масата. Например, ако имате сто милиона клиенти и искате да намерите всички, които вероятно са свързани с компютър, не бихте искали да опитате:

select name from customers where lowercase(name) like '%comp%'

Това вероятно ще ви срине като един тон тухли.

Един от начините, по които сме коригирали това в миналото, е да въведем излишък в данните. Използвайки този първи пример, бихме добавили допълнителна колона, наречена lowerlastname и го попълнете с малката стойност на lastname . След това индексирайте това за целите на търсенето и вашият select изявленията стават ослепително бързи, както трябва да бъдат.

И какво прави това с нашия много обичан 3NF, чух да попитате? Отговорът е "не много", ако знаете какво правите :-)

Можете да настроите базата данни, така че тази нова колона да се попълва от тригер за вмъкване/актуализация, за да поддържате последователност на данните. Напълно приемливо е да счупите 3NF от съображения за производителност, при условие че разбирате и смекчавате последствията.

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

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

select name from customers where name_contains_comp = 'Y'

Отново ще откриете, че заявката е ослепително бърза с малка цена на малко по-бавни вмъквания и актуализации.




  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 JDBC драйвер?

  2. Как да получите списък с общи приятели

  3. java.sql.SQLException:Връзката е затворена [POOL-HikariCP]

  4. недефиниран метод, докато използвате form_for в метода на нов контролер

  5. ER_FK_NO_INDEX_PARENT:Неуспешно добавяне на ограничението за външен ключ. Липсващ индекс за ограничение