Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vidpovidi__Morozov (1).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
108.01 Кб
Скачать

21. Оптимальне використання субд MySql

Оптимізація запитів

У ситуаціях, коли реально потрібно отримати тільки певну порцію даних з MYSQL, можна використовувати ключ LIMIT для функції SELECT. Це корисно, коли, наприклад, потрібно показати результати пошуку чого-небудь в базі даних. Допустимо, в базі є список товарів, які пропонує Ваш інтернет-магазин. Видавати важ список товарів в потрібній категорії дещо негуманно по відношенню до користувача - канали зв'язку з інтернет не у всіх швидкі і видача зайвих ста кілобайт інформації часто примушує користувачів провести не одну хвилину в очікуванні результатів завантаження сторінки. У таких ситуаціях інформацію видають порціями, наприклад по 10 позицій.

Неправильно робити вибірку з бази всієї інформації і фільтрацію висновку скриптом.

Ресурсоємні операції

Разом з тим слід пам'ятати, що існують операції, виконання яких саме по собі вимагає великих ресурсів, чим для звичайних запитів. Наприклад, використання операції DISTINCT до функції SELECT вимагає набагато більшої кількості процесорного часу, чим звичайний SELECT. DISTINCT намагається шукати унікальні значення, часто проводячи безліч порівнянь, підстановок і розрахунків. Причому, чим більше стає об'єм даних, до якого застосовується DISTINCT (адже Ваша база з часом росте), тим повільніше виконуватиметься такий запит і зростання ресурсів, потрібних для виконання такої функції, відбуватиметься не прямопропорційно об'єму даних, що зберігаються, а набагато швидше.

Індекси

Індекси використовують для швидшого пошуку по значенню одного з полів. Якщо індекс не створюється, то MYSQL здійснює послідовний перегляд всіх полів з найпершого запису до найостаннішого, здійснюючи зіставлення вибраного значення з результатним. Чим більше таблиця і чим більше в ній полів, тим довше здійснюється вибірка. Якщо ж у даної таблиці існує індекс для даного стовпця, то MYSQL зможе зробити швидке позиціонування до фізичного розташування даних без необхідності здійснювати повний перегляд таблиці. Наприклад, якщо таблиця складається з 1000 рядків, то швидкість пошуку буде як мінімум в 100 разів швидше. Ця швидкість буде ще вища, якщо є необхідність звернутися відразу до всіх 1000 стовпцям, оскільки в цьому випадку не відбувається витрат часу на позиціонування жорсткого диска.

У яких ситуаціях створення індексу доцільне: Швидкий пошук рядків при використанні конструкції WHERE; Пошук рядків з інших таблиць при виконанні об'єднання; Пошук значення MIN() або MAX() для проіндексованого поля; Сортування або угрупування таблиці у випадку, якщо використовується проіндексоване поле.

Підтримка з'єднання

Як Ви напевно знаєте, для роботи з MySQL-сервером необхідно заздалегідь встановити з ним з'єднання, пред'явивши логін і пароль. Процес установки з'єднання може продовжуватися набагато більший час, ніж безпосередня обробка запиту до бази після установки з'єднання. Слідуючи логіці, треба уникати зайвих з'єднань до бази, не від'єднуючись від неї там, де це можна зробити, якщо надалі планується продовжити роботу з SQL-сервером. Наприклад, якщо Ваш скрипт встановив з'єднання до бази, зробив вибірку даних для аналізу, не потрібно закривати з'єднання до бази, якщо в процесі роботи цього ж скрипта Ви плануєте результати аналізу помістити в базу. Також можна підтримувати так зване persistent (постійне) з'єднання до бази, але це можливо в повному об'ємі при використанні складніших середовищ програмування, чим php або perl в звичайному CGI-режимі, коли інтерпретатор відповідної мови разовий запускається веб-сервером для виконання запиту, що прийшов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]