Използвайте силата на MySQL с разширените команди - Buzut

Видяхме в предишна статия как да управлявате MySQL от командния ред. Така че научихме как да създаваме, модифицираме, изтриваме таблици и бази данни. Също така видяхме как да четем, пишем, изтриваме и сортираме данни в тези таблици. Тези операции съставляват по-голямата част от работата, която човек трябва да свърши в SQL бази данни.

използвайте

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

Индекс на колона

Индексите се използват за ускоряване на заявките и са от съществено значение за създаването на ключове, което ще видим по-късно. Когато се създаде индекс, SQL двигателят съхранява този индекс в отделна структура от данни. Тази структура от данни съдържа сортираните стойности специално за тези данни. По този начин механизмът на SQL е в състояние да намери много ефективно търсените данни.

Следователно индексите позволяват да се ускорят заявките, които използват критерии за търсене, като WHERE .

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

Преди да влезете в детайлите на индексите и да ги създадете, знайте, че разбира се е възможно да ги покажете:

Във връзка с това е възможно да се направи индекс на няколко колони едновременно и можем да използваме този индекс, дори ако не извършим търсене във всички индексирани колони. Това се нарича показалец отляво.

Имате членска таблица:

  • фамилия
  • първо име
  • псевдо

Правите индекс и на трите едновременно. Индексът ще сортира фамилното име, после собственото име, след това псевдонима. Така че, ако искате да търсите само по имена, редът ще бъде абсолютно същият, както ако бяхме създали индекс само по имена.

По същия начин, ако правим търсене на фамилия и име, поръчката все още не се движи в сравнение с индекс на тези две колони. От друга страна, ако искаме да извършим търсене само на псевдо или само на собствено име, това няма да работи.

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

Няколко вида INDEX

УНИКАЛЕН

Както подсказва името, той гарантира, че в таблицата може да има само една стойност веднъж. Това е например индексът, който използваме в ОСНОВНИЯ КЛЮЧ .

ПЪЛЕН ТЕКСТ

Този индекс ви позволява да извършвате мощни търсения на текстово съдържание. Този тип индекс работи само в полета от тип TEXT, CHAR и VARCHAR (в противен случай вече не е текст!). След това ще видим какво позволява да се направи.

Забележка: Не е възможно да се използва техниката „индекс вляво“ с FULLTEXT. В допълнение, този индекс е достъпен само с двигателя myisam.

ПРОСТРАНСТВЕН

Този индекс е малко специфичен, тъй като се отнася до пространствените данни. Ако имате нужда от повече информация, RTFM;)

Създаване на индекси

Можете също да създавате индекси директно в колоните. Трябва да използвате думата KEY или UNIQUE, ако искате уникален индекс. Този синтаксис е по-ограничен, тъй като можете да дефинирате индекси само по една колона наведнъж, нито да указвате ограничение на размера в индекса (например x първите знаци на знак).

Добавяне след създаване на таблица

Понякога не мислим за всичко веднага и бихме искали да добавим индекс към вече съществуваща таблица. ALTER TABLE знаете ?

Има и друга команда, която позволява да се направи същото: CREATE INDEX .

Лично аз харесвам по-малко този начин на правене на нещата, защото трябва да запомните допълнителна команда, когато ALTER TABLE го прави много добре. Освен това по-късно ще видите, че CREATE INDEX позволява по-малко неща от ALTER TABLE, като например изтриване на индекса:

Лесно, нали ?!

Вмъкване или актуализация

Уникалните индекси ви пречат да вмъквате дублирани данни. Ако се опита подобно вмъкване, възниква грешка. Те обаче отварят нова възможност: UPSERT, разбиране на UPDATE или INSERT .

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

В следващите примери предполагаме, че има уникален индекс по телефона .

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

Разбира се, можем да дефинираме стойности, които да модифицираме.

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

И накрая, можете да извършвате актуализации динамично. Това се прави с помощта на ключовата дума VALUE (VALUES преди MariaDB 10.3.3). С тази ключова дума стойността на VALUE (колона) е равна на стойността, както би била вмъкната. От друга страна, ако посочите колона = колона, това е текущата стойност. Както в първия пример, тази възможност позволява да се дефинира израз след UPDATE .

Този път, ако телефонният номер вече съществува, ние просто актуализираме името и фамилията на контакта.

ПЪЛНОТЕКСТОВО изследване

FULLTEXT е много мощен за изследвания. Нарязва струните на думи, за да ги анализира един по един. Думата е поредица от символи без интервали (о ?!) Или две думи, разделени с подчертаващо „_“ или апостроф. Сложните думи, разделени с тирета, се считат за две отделни думи.

Освен това, за да направи това изследване, FULLTEXT взема предвид следните правила:

  • дума, която се появява в 50% от редовете, се игнорира (от съответните),
  • дума по-малка от четири букви се игнорира,
  • прекалено често срещаните английски думи се игнорират. Вие сте французи, няма късмет! Но въпреки това е възможно да се посочат думите, които да се игнорират.

Търсенето на ПЪЛНИЯТЕКСТ се извършва по следния начин:

Има 3 вида ПЪЛНОТЕКСТ търсения:

  • Търсене в РЕЖИМ НА ЕСТЕСТВЕН ЕЗИК. Това е по подразбиране.
  • В BOOLEAN MODE изследвания. Това търсене игнорира правилото за 50%, обсъдено по-горе, и позволява търсенията да се извършват в колони, които не са индексирани (обаче, внимавайте за времето за изпълнение!). Последна точка с булев режим, в резултатите няма сортиране по уместност.
  • Търсенето С РАЗШИРЕНИЕ НА ЗАПИТВАНЕ. Това е обширно изследване. Този тип търсене всъщност прави две търсения в една заявка. Първо изпраща търсения низ в ЕСТЕСТВЕНО търсене, след което стартира втори с параметри, вече не низа, който търсите, а резултатите от първото търсене. Ето защо това е обширно търсене.

За да посочите вида на търсенето:

Ще разберете, че FULLTEXT индексите представляват голям интерес, когато става въпрос за извършване на търсения на масата. За съжаление този тип индекс присъства само в таблиците MyISAM. И ще видите по-късно, че InnoDB има много силни страни, които MyISAM няма. Накратко, ще трябва да направим избор.