Доброго дня.
Виявлено проблему зі швидкістю роботи вашого модуля.
Причина, немає індексів для полів таблиць.
Таблиця: oc_hpmrr_links
Колонка Тип
id int(11) Автоматичне збільшення
parent_id int(10) unsigned
product_id int(10) unsigned
sort int(10) unsigned NULL [1]
grsort int(10) unsigned NULL [1]
image varchar(255) NULL
Індекси
PRIMARY id
UNIQUE product_id, parent_id
Приклад SQL запиту який виконується
SELECT p.product_id, hl.sort, text as val
FROM oc_hpmrr_links hl
LEFT JOIN oc_product p ON hl.product_id = p.product_id
LEFT JOIN oc_product_attribute pa ON p.product_id = pa.product_id
WHERE parent_id = '640393'
AND attribute_id = '159'
AND language_id = '4'
AND status = 1
У вашій таблиці є унікальний індекс по полях (product_id, parent_id).
Ваш SQL запит фільтрує за parent_id, що є другою частиною цього індексу.
Оскільки parent_id не є першою колонкою в індексі, MySQL не зможе використовувати цей індекс ефективно для вашого запиту.
Рекомендації для покращення.
Створіть окремий індекс для parent_id:
CREATE INDEX idx_parent_id ON oc_hpmrr_links(parent_id);
Так само, проблеми виявлені з іншими полями і таблицями, рекомендації:
CREATE INDEX idx_sort ON oc_hpmrr_links(sort);
CREATE INDEX idx_grsort ON oc_hpmrr_links(grsort);
CREATE INDEX idx_serie_id ON oc_hpmrr_product_index(serie_id);
CREATE INDEX idx_status ON oc_hpmrr_type(status);
Рекомендації для покращення виконання SQL запитів для полів із числовим типом.
На прикладі таблиці oc_hpmrr_links.
Тип даних: parent_id має тип int(10) unsigned, що означає беззнаковий цілочисловий тип.
Значення в запиті використовується '640393' в лапках, що робить його рядковим значенням.
Проблема: коли ви використовуєте рядкове значення ('640393') для порівняння з цілочисловим полем (parent_id), MySQL змушений виконувати неявне перетворення типів. Це може призвести до зниження продуктивності, тому що MySQL повинен конвертувати кожне значення parent_id в рядок для порівняння або конвертувати '640393' в число для кожного рядка.
Насправді це глобальна проблема всього коду OpenCart та сторонніх модулів, коли для числових полів беруть у лапки значення, можливо проблема не така гостра, але все ж, якщо робити, то з розумом!
Ці поради виявляться корисними для всіх розробників модулів OpenCart, допомагаючи створювати ефективні рішення для користувачів і тішити їх вашою якістю наданого рішення. Гарного дня!