Початківець WEB майстер
Напевно будь-який початківець WEB будівельник задається таким питанням - як побудувати свою базу даних так, щоб при збільшенні навантаження WEB сайт працював ефективно, а не починав гальмувати. Насправді, все дуже просто: сайти уповільнюють свою роботу не через навантаження скриптів на процесор, а через MySQL сервера, який погано функціонує. І зараз ми спробуємо вирішити цю задачу.
Метод прискорення роботи MySQL шляхом поділу даних в таблицях
Для початку визначимо зв'язок MySQL з таблицями і стане ясно, що під час запису в таблиці, наприклад, INSERT, таблиці блокуються, так як швидкість запису стає занадто низькою і статус таблиць не дозволяє зчитувати з них дані до закінчення процесу запису. Може вийти так, що під час цього запису MySQL сервером надовго буде заблокований доступ, як до таблиці, так і до решти скриптам.
Наприклад, нижче наведена таблиця новин даного типу:
Кожен раз, коли ви будете звертатися до новин, скрипт показує саму новину і збільшується поле VIEWS запитом UPDATE table «NEWS» set VIEWS = VIEWS + 1 where id = ID. Відповідно, кількість апдейтів буде досить високим і кожен UPDATE призведе до блокування таблиці, і всі інші запущені операції будуть чекати завершення даної операції. Виникає питання: якщо таблиця дуже велика і всі процеси починають глючити через перевантаження, як знайти вихід з ситуації, що склалася? Відповідь така: потрібно замість однієї таблиці робити кілька і класифікувати їх за типом застосування. Одну таблицю - виключно для виведення, другу - для оновлень, наприклад.
Що стосується новин, то краще тримати їх в абсолютно іншій таблиці, в якій відсутній поле VIEWS. Таким чином, таблиця з новинами буде кешуватися, і виводитися дуже швидко, а оновлення таблиці COUNT буде проходити дуже швидко, так як буде досить легкою. Таке ось поділ роботи за таблицями допомагає значно прискорити роботу MySQL сервера, тому що значно швидше відповідають багато маленьких запитів, ніж один довгий і об'ємний.
Прискорення роботи MySQL шляхом DELAYED
Ще одна корисна порада щодо таблиць свідчить, що для того, щоб не блокувати таблицю краще використовувати операцію DELAYED, що допомагає сервера відгалужувати весь потік інформації в режимі очікування. Такий метод підходить для будь-яких типів кумулятивних таблиць, так як в даному випадку неважливо, коли подіють зміни - миттєво або протягом декількох секунд.
До всього вищесказаного слід додати, що операція UPDATE включає в себе три етапи: пошук того, що буде змінюватися, оновлення індексів і запис даних. Причому, якщо є індекси, то операція кешируєтся і потребує мало часу для її виконання. І стає ясно, що велика таблиця буде гальмувати при UPDATE, INSERT ж виконується дуже швидко і виходить, що робота головних таблиць можлива тільки в режимі виведення.
Якщо робимо запит SELECT * FROM, з'являється запит всіх даних таблиці, але більш ефективним є використання точних назв полів, необхідних скрипту. Також прискорити виведення можна за допомогою директиви LIMIT.
Крім того, використання індексів істотно прискорює процес виведення даних з таблиць. Існує певний тип полів для різних записів: тип TINYINT займає 1 байт, який є найшвидшим, таблиці з MEDIUMINT - швидше таблиць з INT, VARCHAR виходить повільніше CHAR.
Підсумки прискорення MySQL
Таким чином, можна сказати, що для більшості сайтів підходять всі вищезгадані поради по використанню MySQL. Потрібно намагатися відокремити фонові і інтерактивні операції один від одного, так як у фоновому режимі можна ефективно готувати контент.
Загалом, основне, що слід винести з цих рад - це те, що будь то операції або таблиці, все потрібно дробити на частини, на дрібниці, не можна скидати все в одну таблицю, тоді виконання запитів буде призупинено. Більш ефективним буде спростити все до найдрібніших деталей.
Додаткова інформація по темі
Інструкція з прикладами, яким чином необхідно правильно використовувати змінні в PHP