В този урок ще покрием някои от основите на индексирането. Като част от серията MySQL, ние ще представим възможностите на MySQL индексирането и ролята, която играе за оптимизиране на производителността на базата данни. Liquid Web препоръчва да се консултирате с DBA, преди да направите каквито и да е промени във вашето приложение на ниво производство.
Какво е индексиране?
Индексирането е мощна структура в MySQL, която може да се използва, за да получите най-бързо време за отговор от често срещани заявки. MySQL заявките постигат ефективност чрез генериране на по-малка таблица, наречена индекс, от определена колона или набор от колони. Тези колони, наречени ключ, могат да се използват за налагане на уникалност. По-долу е дадена проста визуализация на примерен индекс, използващ две колони като ключ.
+------+----------+----------+
| ROW | COLUMN_1 | COLUMN_2 |
+------+----------+----------+
| 1 | data1 | data2 |
+------+----------+----------+
| 2 | data1 | data1 |
+------+----------+----------+
| 3 | data1 | data1 |
+------+----------+----------+
| 4 | data1 | data1 |
+------+----------+----------+
| 5 | data1 | data1 |
+------+----------+----------+
Заявките използват индекси за идентифициране и извличане на целевите данни, дори ако те са комбинация от ключове. Без индекс изпълнението на същата заявка води до проверка на всеки ред за необходимите данни. Индексирането създава пряк път с много по-бързо време за заявка в обширни таблици. Аналогията с учебници може да предостави друг общ начин за визуализиране на функционирането на индексите.
Кога да активирате индексирането?
Индексирането е изгодно само за огромни таблици с редовно достъпна информация. Например, за да продължим с нашата аналогия с учебниците, няма смисъл да индексираме детска книга с приказки само с десетина страници. По-ефективно е просто да прочетете книгата, за да намерите всяко появяване на думата „костенурка“, отколкото да настроите и поддържате индекси, да направите заявка за тези индекси и след това да прегледате всяка предоставена страница. В компютърния свят тези допълнителни задачи, свързани с индексирането, представляват пропилени ресурси, които биха били по-добре предназначени, ако не се индексират.
Без индекси, когато таблиците нараснат до огромни размери, времето за отговор страда от заявки, насочени към тези тъпи таблици. Неефективните заявки се проявяват в латентност в работата на приложението или уебсайта. Обикновено идентифицираме тази латентност, като използваме MySQL функцията за бавен дневник на заявки. Можете да намерите повече подробности за използването на функцията за бавен регистър на заявките в първата статия от тази поредица:MySQL Performance:Идентифициране на дълги заявки.
След като колосална таблица достигне преломната си точка, тя достига потенциала за прекъсване на приложенията и уебсайтовете . Провеждането на рутинни оценки за нарастваща база данни установява оптимална производителност на базата данни и заобикаля присъщите прекъсвания на дългите заявки.
Индексиране на MySQL Плюсове срещу Против
Използването на MySQL индексиране има предимства и недостатъци и ние ще обсъдим значителните плюсове и минуси за ваше внимание. Тези аспекти ще ви насочат да решите дали индексирането е подходящ избор за вашата ситуация.
Каква информация индексира?
Изборът на това какво да се индексира е може би най-трудната част от индексирането на вашите бази данни. Определяне на това, което е достатъчно важно за индексиране и кое е достатъчно доброкачествено, за да не се индексира. Най-общо казано, индексирането работи най-добре на онези колони, които са предмет на клаузите WHERE във вашите често изпълнявани заявки. Помислете за следната опростена таблица:
ID, TITLE, LAST_NAME, FIRST_NAME, MAIDEN_NAME, DOB, GENDER, AGE, DESCRIPTION, HISTORY, ETC...
Ако вашите заявки разчитат на тестване на клаузата WHERE с помощта на LAST_NAME и FIRST_NAME, тогава индексирането по тези две колони значително ще увеличи времето за отговор на заявката. Алтернативно, ако вашите заявки разчитат на просто търсене на идентификатор, индексирането по идентификационен номер би било по-добрият избор.
Тези примери са само елементарен пример и има няколко типа индексиращи структури, вградени в MySQL. Следната страница на MySQL обсъжда тези типове индекси по-подробно и препоръчително четиво за всеки, който обмисля индексиране:Как MySQL използва индекси
Какво е уникален индекс?
Друг момент, който трябва да имате предвид, когато оценявате кои колони да служат като ключ във вашия индекс, е дали да използвате ограничението UNIQUE. Задаването на ограничението UNIQUE ще наложи уникалност въз основа на конфигурирания ключ за индексиране. Както при всеки ключ, това може да бъде една колона или конкатенация от множество колони. Функцията на това ограничение гарантира, че няма дублиращи се записи в таблицата въз основа на конфигурирания ключ.
Какво е индекс на първичен ключ?
Както често се извиква ограничението UNIQUE, ПЪРВИЧНИЯ КЛЮЧ се използва за оптимизиране на индекси. Това ограничение гарантира, че определеният ПЪРВИЧЕН КЛЮЧ не може да бъде с нулева стойност. В резултат на това се получава повишаване на производителността, когато се изпълнява на InnoDB устройство за съхранение за въпросната таблица. Този тласък се дължи на начина, по който InnoDB физически съхранява данни, като поставя редове с нулева стойност в ключа извън непрекъсната последователност с редове, които имат стойности. Активирането на това ограничение гарантира, че редовете на таблицата се поддържат в последователен ред за по-бързи отговори.
Управление на индекси
Сега ще покрием някои от основите на манипулирането на индекси с помощта на MySQL синтаксис. В примери ще включим създаването, изтриването и изброяването на индекси. Имайте предвид, че тези примери имат записи за място за конкретни ключови думи. Тези ключови думи са обясними сами по себе си за лесно четене и по-долу е начертано тяхно описание.
Списък/показване на индекси
Таблиците могат да имат множество индекси. Управлението на индекси неизбежно ще изисква възможността да изброите съществуващите индекси в таблица. Синтаксисът за преглед на индекс е по-долу.
SHOW INDEX FROM tableName;
Създаване на индекси
Създаването на индекс има прост синтаксис. Трудността е да се определи кои колони се нуждаят от индексиране и дали е необходимо налагане на уникалност. По-долу ще илюстрираме как да създавате индекси със и без ПЪРВИЧЕН КЛЮЧ и УНИКАЛНИ ограничения.
Както беше споменато по-горе, таблиците могат да имат множество индекси. Множественото индексиране е полезно за създаване на индекси, съобразени със заявките, изисквани от вашето приложение или уебсайт. Настройките по подразбиране позволяват до 16 индекса на таблица, увеличават този брой, но обикновено е повече, отколкото е необходимо. Индексите могат да се създават по време на създаването на таблица или да се добавят към таблицата като допълнителни индекси по-късно. Ще разгледаме и двата метода по-долу.
Пример:Създайте таблица със стандартен индекс
CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
INDEX ( ID )
);
Пример:Създайте таблица с уникален индекс и първичен ключ
CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
PRIMARY KEY (ID),
UNIQUE INDEX ( ID )
);
Пример:Добавете индекс към съществуваща таблица
CREATE INDEX indexName ON tableName (ID, LName, FName, LOC);
Пример:Добавете индекс към съществуваща таблица с първичен ключ
CREATE UNIQUE INDEX indexName ON tableName (ID, LName, FName, LOC);
Изтриване на индекси
Докато управлявате индекси, може да се окаже необходимо да премахнете някои. Изтриването на индекси също е много прост процес, вижте примера по-долу:
DROP INDEX indexName ON tableName;
Има много начини да оптимизирате вашата база данни за истинска ефективност. Ако искате да научите повече или да конвертирате типовете търсачки, налични в MySQL, прочетете нашия урок за MyISAM срещу InnoDB. Или ако имате нужда от високофункциониращи бази данни, разгледайте нашата продуктова страница на MySQL за да видите различни опции.