Mysql запрос к двум таблицам требует времени для выполнения (4000 записей в каждой таблице) - PullRequest
0 голосов
/ 08 марта 2019

Я пишу запрос на соединение для двух таблиц, по 4000 записей в каждой, чтобы получить данные с помощью php.Я выполняю запрос в MySQL, и это занимает 32 секунды.

Вот запрос

SELECT Distinct a.*,b.* 
FROM OrderCalculation a right join  crm_order b on a.orderid = b.orderno  
order by b.orderno desc LIMIT 20 OFFSET 0

Может ли кто-нибудь улучшить этот запрос и сократить время выполнения

Спасибо

Ответы [ 3 ]

1 голос
/ 08 марта 2019

Я могу предложить следующее предложение по индексу, которое может улучшить производительность вашего запроса:

CREATE INDEX idx ON crm_order (orderno, col1, col2, ...);

Я бы предложил это, только если у вас есть не более 4-5 других столбцов в таблице crm_orderпокрывать.Если у вас есть что-то большее, возможно, имеет смысл не использовать этот индекс.

Если это помогает, индекс работает, позволяя MySQL быстро искать каждое значение orderno из таблицы OrderCalculation.Это также предполагает, что MySQL будет выполнять полное сканирование таблицы OrderCalculation.Возможно, вы захотите сначала запустить EXPLAIN в своем текущем запросе, чтобы увидеть ваше положение.

0 голосов
/ 08 марта 2019

Просто для справки, мы обычно пишем этот запрос следующим образом:

SELECT c.olumns
     , y.ou
     , a.ctually
     , w.ant 
  FROM crm_order a 
  LEFT
  JOIN OrderCalculation b
    ON b.orderid = a.orderno  
 ORDER  
    BY b.orderno DESC
 LIMIT 0,20 
0 голосов
/ 08 марта 2019

Поскольку ваше объединение использует orderid и orderno столбцы таблиц OrderCalculation и crm_order соответственно, вы можете добавить индекс для этих двух столбцов и измерить производительность.

Вот MySQL документация о том, как создать индекс.

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