Для выполнения следующего запроса в таблице из 1.000.000 строк требуется более 20 секунд
SELECT max(listing.category) AS category,
max(listing.subcategory) AS subcategory,
max(listing.created_at) AS date,
listing.keystring AS listing_keystring
FROM listing
WHERE listing.privacy > 10
GROUP BY listing.keystring
ORDER BY date
LIMIT 10
Если я удалю часть «порядок по», выполнение запроса займет менее 1 секунды.
Согласно оператору объяснения: EXTRA говорит: «Использование где; Использование временного; Использование файловой сортировки» Тип говорит: Индекс «Ключ говорит: list_idx_keystring_category»
Здесь оператор создания таблицы:
'CREATE TABLE `listing` (`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) DEFAULT NULL,
`bw` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`subcategory` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`category` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`place` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`time` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`is_hidden` tinyint(1) NOT NULL DEFAULT ''0'',
`privacy` int(11) NOT NULL DEFAULT ''20'',
`keystring` varchar(255) COLLATE utf8mb4_unicode_ci
GENERATED ALWAYS AS (concat(`bw`,`category`,ifnull(`subcategory`,''''),ifnull(`place`,''''),ifnull(`time`,''''))) STORED,
PRIMARY KEY (`id`),
KEY `listing_idx_privacy` (`privacy`),
KEY `listing_idx_keystring_category` (`keystring`,`category`),
KEY `idx_listing_created_at_privacy` (`created_at`,`privacy`),
KEY `idx_listing_created_at` (`created_at`),
KEY `idx_listing_bw` (`bw`),
KEY `idx_listing_subcategory` (`subcategory`),
KEY `idx_listing_category` (`category`),
KEY `idx_listing_place` (`place`),
KEY `idx_listing_time` (`time`)
) ENGINE=InnoDB AUTO_INCREMENT=1500001
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci'
Есть ли что-нибудь, что можно сделать для повышения скорости?
Я пробовал добавлять разные комбинации индексов, но безуспешно ...