Необходимо разобраться с индексами, для оптимизации sql запроса - MySQL

Узнай цену своей работы

Формулировка задачи:

Всем добрый день, уверен Вы сможете помочь. В общем есть БД MySql Есть запрос который дергает несколько таблиц и выполняется долго, вот проблемная часть запроса которая долго выполняется. Там где звездочки там перечислены поля.
SELECT *
FROM (  SELECT DocId, MAX(DatePrice) AS DatePrice
        FROM PriceDate
        GROUP BY DocId
    ) NP
INNER JOIN Price P ON P.DocID = NP.DocId AND NP.DatePrice = P.PriceDate 
LEFT JOIN EncItems EI ON EI.DocId = P.DocID AND EI.Code = P.CodeID
GROUP BY *
Я не очень вкуриваю тему индексов. Делал Explain всего запроса.
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY <derived2> system NULL NULL NULL NULL 1 Using temporary; Using filesort
1 PRIMARY P ALL NULL NULL NULL NULL 134021 Using where
1 PRIMARY EI ref Code Code 202 func 1  
1 PRIMARY LG index NULL ParentId 12 NULL 5216 Using index
1 PRIMARY OG eq_ref PRIMARY PRIMARY 4 LG.ParentId 1  
1 PRIMARY LFD index NULL ParentId 12 NULL 5216 Using index
1 PRIMARY OFD eq_ref PRIMARY PRIMARY 4 LFD.ParentId 1  
1 PRIMARY LD index NULL ParentId 12 NULL 5216 Using index
1 PRIMARY OD eq_ref PRIMARY PRIMARY 4 LD.ParentId 1  
1 PRIMARY LN index NULL ParentId 12 NULL 5216 Using index
1 PRIMARY OND eq_ref PRIMARY PRIMARY 4 LN.ParentId 1  
1 PRIMARY LM index NULL ParentId 12 NULL 5216 Using index
1 PRIMARY OM eq_ref PRIMARY PRIMARY 4 LM.ParentId 1  
1 PRIMARY LC index NULL ParentId 12 NULL 5216 Using index
1 PRIMARY OC eq_ref PRIMARY PRIMARY 4 LC.ParentId 1  
1 PRIMARY LET index NULL ParentId 12 NULL 5216 Using index
1 PRIMARY OET eq_ref PRIMARY PRIMARY 4 LET.ParentId 1  
9 SUBQUERY LinkType const CODE CODE 12 const 1  
8 SUBQUERY LinkType const CODE CODE 12 const 1  
7 SUBQUERY LinkType const CODE CODE 12 const 1  
6 SUBQUERY LinkType const CODE CODE 12 const 1  
5 SUBQUERY LinkType const CODE CODE 12 const 1  
4 SUBQUERY LinkType const CODE CODE 12 const 1  
3 SUBQUERY LinkType const CODE CODE 12 const 1  
2 DERIVED PriceDate range NULL DocId 4 NULL 9 Using index for group-by
Подскажите какие поля индексировать и каким способом лучше, как делать составные индексы. Так сказать на практике объясните Заранее спасибо.

Решение задачи: «Необходимо разобраться с индексами, для оптимизации sql запроса»

textual
Листинг программы
SELECT DocId, MAX(DatePrice) AS DatePrice
FROM PriceDate
GROUP BY DocId

Объяснение кода листинга программы

  1. Запрос написан на SQL языке.
  2. Запрос выбирает два поля: DocId и MAX(DatePrice).
  3. Поле DocId будет содержать идентификатор документа.
  4. Поле DatePrice будет содержать максимальную дату цены для каждого документа.
  5. Результат запроса будет содержать только уникальные записи по полю DocId.
  6. Запрос использует оператор GROUP BY для группировки записей по полю DocId.
  7. Функция MAX используется для получения максимального значения поля DatePrice для каждого группированного документа.
  8. Запрос выполняется на таблице PriceDate, которая содержит информацию о ценах и датах документов.
  9. В результате выполнения запроса будет создан список документов с их максимальными датами цен.
  10. Этот список может быть использован для оптимизации SQL запросов, связанных с выборкой документов по дате цены.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5