При использовании Order By Clause время выполнения в 40 раз выше - PullRequest
0 голосов
/ 01 июня 2019

У меня есть таблица с 200 000 записей, которые я пытаюсь отфильтровать и отсортировать по некоторым условиям.

  • Без ORDER BY p.date_time desc запрос занимает 0,078 секунды.
  • С ORDER BY p.date_time desc требуется 2,225 секунды

Запрос:

SELECT p.*
        , s.*
        ,  (SELECT  COUNT(1)
            FROM    gbs_comments
            WHERE   product_short_url = p.product_short_url 
        ) AS comment_count
        ,( EXISTS
            ( SELECT *
              FROM  `gbs_likes`
              WHERE `product_short_url` = p.product_short_url
              AND `ip_address` = '1' 
             )
        ) AS like_status
FROM   gbs_products p, gbs_store s
WHERE  p.deal_type = 1
  AND  p.product_store = s.sid
ORDER BY p.date_time DESC

Табличные индексы:

Screenshot of table indexes

Объяснить план:

Explain Plan

Табличные индексы:

GBS_COMMENTS

GBS_COMMENTS INDEX

GBS_LIKES INDEX

GBS_LIKES

ИНДЕКС ПРОДУКТА GBS

GBS_PRODUCT

1 Ответ

0 голосов
/ 01 июня 2019

gbs_comments потребности INDEX(product_short_url)

gbs_likes нужно INDEX(ip_address, product_short_url), в любом порядке.

gbs_products нужно INDEX(deal_type, date_time), в этом порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...