Я очень новичок в индексировании MySQL. Я пытаюсь создать индексы для таблицы web_products
. Я создал индекс IsDataActive_IsVerified_IsExpired_Price_Sale
, чтобы оптимизировать нижеследующий запрос;Как оптимизировать MySQL-запрос с использованием индексов с несколькими столбцами?
SELECT
MAX(Price_Sale) as maxColumn
FROM
`web_products` `t`
WHERE
IsDataActive = 1 AND IsVerified = 1
AND IsExpired = 0
и когда я анализирую запрос с использованием Explain
Я получаю наилучший результат "Select tables optimized away"
.
У меня есть другой запрос, который работает очень плохо. Таблица web_products
может содержать миллионы продуктов. Выполнение нижеследующего запроса занимает несколько минут;
SELECT
COUNT(P.BrandID)
FROM
web_products AS P
WHERE
P.OriginalItemID IS NULL
AND P.IsDataActive = 1
AND P.IsExpired = 0
AND P.IsVerified = 1;
BrandID
является FK в brands
таблице. Ниже приведено сообщение Explain Analysis. Как оптимизировать вышеуказанный запрос?
Update 1
The Index
упоминается в ответе очаровательно работает для вышеупомянутых запросов. Я получаю результаты менее чем за 0,200 мс.
Я изменил второй запрос и добавил MerchantID
к индексу теперь требуется 1 секунда для выполнения нижеследующего запроса. Объяснение показывает, число rows examined
составляет 88331
. Есть ли способ довести время выполнения до миллисекунды?
SELECT
P.BrandID, COUNT(P.BrandID) as Count, B.Name
FROM
web_products AS P
inner join
web_brands as B ON P.BrandID = B.ID
INNER JOIN
web_merchants M ON P.MerchantID = M.ID
LEFT JOIN
web_products_features F ON P.ID = F.Product_ID
WHERE
P.OriginalItemID IS NULL
AND P.IsDataActive = 1
AND P.IsExpired = 0
AND P.IsVerified = 1
AND B.IsDataActive = 1
group by P.BrandID
order by Count desc
Limit 100
LIMIT бесцельно здесь – Strawberry
@Strawberry Спасибо ... Я понимаю это. Запрос был динамически генерирован во время выполнения. –
@Strawberry Edited. –