Ще раз переконався: оптимізувати доводиться не лише власне програмне забезпечення, а й сторонні системи. У січні 2008 року на моїй інсталяції Drupal модуль Aggregator почав працювати дуже повільно після накопичення приблизно 200 тисяч записів. Aggregator збирав новини з різних джерел і зберігав їх у базі. Навантаження стало помітним навіть на багатопроцесорному сервері.
Що я змінив
Під час розбору запитів у файлі \modules\aggregator\aggregator.module я прибрав використані там LEFT JOIN і додав індекси до полів, за якими виконувалося сортування. За моїм спостереженням, після цих змін затримки істотно зменшилися.
Що перевіряти разом зі швидкістю
У дописі не збережено версії Drupal, повних запитів, планів виконання чи вимірювань до й після. Видалення LEFT JOIN може змінити набір результатів, тому повторювати таке втручання без перевірки логіки не можна.
Так само індекс для кожного поля з ORDER BY не гарантує прискорення. Документація MySQL 8.4 пояснює, що використання індексу для сортування залежить від структури запиту та вартості плану. Спочатку потрібно дослідити конкретний запит і його план EXPLAIN, а після зміни перевірити і швидкість, і правильність результату.
Немає коментарів:
Дописати коментар