Как я могу сократить время выполнения представления?

0

Вот мой запрос:

select count(1) AS 'number',
       'pronexo_pronexo'.'unique_products'.'product_id' AS 'product_id',
       'pronexo_pronexo'.'products'.'name' AS 'name'
from ( 'pronexo_pronexo'.'unique_products'
join 'pronexo_pronexo'.'products' 
on(('pronexo_pronexo'.'unique_products'.'product_id' = 'pronexo_pronexo'.'products'.'id')))
where isnull('pronexo_pronexo'.'unique_products'.'exit_time')
group by 'pronexo_pronexo'.'unique_products'.'product_id'

И вот результат EXPLAIN:

Изображение 174551

Любая идея должна ли я создать индекс, по которому столбцы (столбцы) будут делать это быстрее? Это займет около 3 секунд. Кстати, данные сейчас не огромны.

  • 0
    Общее правило: индексируйте предикат соединения и все, что указано в предложении where.
  • 0
    Научитесь использовать псевдоним таблицы. Повторяющиеся длинные имена таблиц действительно раздражают !!
Теги:
performance

1 ответ

0
Лучший ответ
select  count(1) AS 'number',
        u.'product_id',
        p.'name'
    from  'pronexo_pronexo'.'unique_products' AS u
    join  'pronexo_pronexo'.'products' AS p
      on  u.'product_id' =  p.'id'
     where  isnull(u.'exit_time')
    group by  u.'product_id'

Измените isnull(u.exit_time) на u.exit_time IS NULL.

Добавьте INDEX(exit_time, product_id) в unique_products.

В products, если id не проиндексирован, проиндексируйте его.

Для дальнейшего обсуждения просьба предоставить SHOW CREATE TABLE.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню