Медленное (5 секунд) обновление MySQL с использованием индексированных столбцов и разумного внутреннего соединения, не мMySql

Форум по Mysql
Ответить
Anonymous
 Медленное (5 секунд) обновление MySQL с использованием индексированных столбцов и разумного внутреннего соединения, не м

Сообщение Anonymous »

mariadb 10.11.10 < /p>
У меня есть сайт электронной коммерции Cart Cart (я полагаю, вариант Oscommerce) на стеке ламп с одной пользовательской таблицей (одна из которых я создал) присоединился к Продукты основного продукта Таблица. Это работает на производственной системе без проблем с производительностью во время обычных операций, в качестве сайта электронной коммерции это в основном выбирает запросы на эти же таблицы, выполняемые в течение хорошего времени. Обновите запрос, чтобы изменить поле Products_sort_order на новое значение. Все поля индексируются, в обеих таблицах индексируется в обеих таблицах, а также три поля Varchar, которые я указываю в пункте «Где» также индексируются. Обе таблицы используют один и тот же двигатель, Myisam. Почему этот запрос на обновление так медленно? < /P>
MariaDB [premier158]> UPDATE products p
-> INNER JOIN product_premier_extra pe USING (products_id)
-> SET products_sort_order = 1000
-> WHERE model = 'splashback'
-> AND style = 'digital'
-> AND variation = 'Liquid Lava';
Query OK, 0 rows affected (4.566 sec)
Rows matched: 51 Changed: 0 Warnings: 0

Время выполнения второго запроса 4.566 - это проблема. >
explain UPDATE products p
INNER JOIN product_premier_extra pe USING (products_id)
SET products_sort_order = 1000
WHERE model = 'splashback'
AND style = 'digital'
AND variation = 'Liquid Lava';
1 SIMPLE pe ref idx_product_premier_id,idx_product_premier_extra_fields idx_product_premier_extra_fields 906 const,const,const 32 Using where
1 SIMPLE p eq_ref PRIMARY PRIMARY 4 premier158.pe.products_id 1

Таблицы имеют 17К строк в каждом (это отношение 1: 1 на продуктах_ид ), так что не большой объем.
Создать таблицу Вывод показывает индексы, важными являются то, что products_id индексируется как в обоих, так и в остальных трех полях Model , style , variation в соединенной таблице product_premier_extra также индексируются (см. Использование IDX_PRODUCT_PREMIER_EXTRA_FIELDS в плане объяснения выше). Все эти столбцы не являются null .
Я читал различные другие посты, касающиеся медленных запросов, это, как правило, снижается до двух случаев, 1/плохо индексированные данные 2/ Массовые объемы данных. Двигатель не подходит или плохо настроен. Здесь не так. Используемые системы высокой производительности без базовых аппаратных проблем. Создайте вывод таблицы здесь, но это довольно длинное: < /p>
CREATE TABLE `products` (
`products_id` int(11) NOT NULL AUTO_INCREMENT,
`products_type` int(11) NOT NULL DEFAULT 1,
`products_quantity` float NOT NULL DEFAULT 0,
`products_model` varchar(64) DEFAULT NULL,
`products_image` varchar(255) DEFAULT NULL,
`products_price` decimal(15,4) NOT NULL DEFAULT 0.0000,
`products_virtual` tinyint(1) NOT NULL DEFAULT 0,
`products_date_added` datetime NOT NULL DEFAULT '0001-01-01 00:00:00',
`products_last_modified` datetime DEFAULT NULL,
`products_date_available` datetime DEFAULT NULL,
`products_weight` float NOT NULL DEFAULT 0,
`products_status` tinyint(1) NOT NULL DEFAULT 0,
`products_tax_class_id` int(11) NOT NULL DEFAULT 0,
`manufacturers_id` int(11) DEFAULT NULL,
`products_ordered` float NOT NULL DEFAULT 0,
`products_quantity_order_min` float NOT NULL DEFAULT 1,
`products_quantity_order_units` float NOT NULL DEFAULT 1,
`products_priced_by_attribute` tinyint(1) NOT NULL DEFAULT 0,
`product_is_free` tinyint(1) NOT NULL DEFAULT 0,
`product_is_call` tinyint(1) NOT NULL DEFAULT 0,
`products_quantity_mixed` tinyint(1) NOT NULL DEFAULT 0,
`product_is_always_free_shipping` tinyint(1) NOT NULL DEFAULT 0,
`products_qty_box_status` tinyint(1) NOT NULL DEFAULT 1,
`products_quantity_order_max` float NOT NULL DEFAULT 0,
`products_sort_order` int(11) NOT NULL DEFAULT 0,
`products_discount_type` tinyint(1) NOT NULL DEFAULT 0,
`products_discount_type_from` tinyint(1) NOT NULL DEFAULT 0,
`products_price_sorter` decimal(15,4) NOT NULL DEFAULT 0.0000,
`master_categories_id` int(11) NOT NULL DEFAULT 0,
`products_mixed_discount_quantity` tinyint(1) NOT NULL DEFAULT 1,
`metatags_title_status` tinyint(1) NOT NULL DEFAULT 0,
`metatags_products_name_status` tinyint(1) NOT NULL DEFAULT 0,
`metatags_model_status` tinyint(1) NOT NULL DEFAULT 0,
`metatags_price_status` tinyint(1) NOT NULL DEFAULT 0,
`metatags_title_tagline_status` tinyint(1) NOT NULL DEFAULT 0,
`products_sku` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
PRIMARY KEY (`products_id`),
KEY `idx_products_date_added_zen` (`products_date_added`),
KEY `idx_products_status_zen` (`products_status`),
KEY `idx_products_date_available_zen` (`products_date_available`),
KEY `idx_products_ordered_zen` (`products_ordered`),
KEY `idx_products_model_zen` (`products_model`),
KEY `idx_products_price_sorter_zen` (`products_price_sorter`),
KEY `idx_master_categories_id_zen` (`master_categories_id`),
KEY `idx_products_sort_order_zen` (`products_sort_order`),
KEY `idx_manufacturers_id_zen` (`manufacturers_id`),
KEY `idx_products_products_sku` (`products_sku`)
) ENGINE=MyISAM AUTO_INCREMENT=32083 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci
< /code>
CREATE TABLE `product_premier_extra` (
`products_id` int(11) NOT NULL,
`features` varchar(3000) NOT NULL,
`specifications` varchar(3000) NOT NULL,
`dimensions` varchar(3000) NOT NULL,
`diagram` varchar(100) NOT NULL,
`model` varchar(100) NOT NULL,
`style` varchar(100) NOT NULL,
`variation` varchar(100) NOT NULL,
`width` int(11) DEFAULT NULL,
`height` int(11) DEFAULT NULL,
UNIQUE KEY `idx_product_premier_id` (`products_id`),
KEY `idx_product_premier_extra_fields` (`model`,`style`,`variation`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_general_ci


Подробнее здесь: https://stackoverflow.com/questions/794 ... r-join-can
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»