Оптимизация запросов MySQL для двух таблиц, где ID не завершается во 2-й таблице

#mysql #sql #query-optimization

#mysql #sql #оптимизация запросов

Вопрос:

У нас есть это ниже запроса MySQL. в то время как запрос выполняется плавно на локальном хосте с огромными данными, на реальном сервере это занимает много времени. я пытался оптимизировать его, но безрезультатно. может ли этот код быть написан более простым термином? помощь будет действительно оценена.

 SELECT id, Request_By, Org_Name, Branch_Name, SALES_PERSON, Is_Consignee, Is_Shipper, EmailId, Telephone, Credit_LimitRS, IE_Code_No,
    PAN_No, Credit_limitDAYS, GL_Link 
    FROM mst_ship_con_newcust
    WHERE ( not EXISTS ( SELECT * FROM mst_branch_info b where b.id = mst_ship_con_newcust.id) ) 
    ORDER BY id desc
  

Комментарии:

1. Пожалуйста, опубликуйте результат объяснения с сервера, а также сообщите нам примерно, сколько времени требуется серверу для выполнения запроса, и сколько записей у вас есть в таблицах.

2. Я получаю данные, но для отображения результата на реальном сервере требуется от 3 1/2 до 4 минут

3. ОК. Пожалуйста, покажите нам результат объяснения. До тех пор это будет чистая догадка.

4. Каким образом? Пожалуйста, направляйте. Я показываю данные из первой таблицы только там, где основного идентификатора первой таблицы еще нет во второй таблице.

5. explain select ...

Ответ №1:

 SELECT id, Request_By, Org_Name, Branch_Name, SALES_PERSON, Is_Consignee,    Is_Shipper, EmailId, Telephone, Credit_LimitRS, IE_Code_No,
PAN_No, Credit_limitDAYS, GL_Link 
FROM mst_ship_con_newcust
  LEFT JOIN mst_branch_info b ON b.id = mst_ship_con_newcust.id
WHERE b.id IS NULL
ORDER BY id desc
  

Как насчет LEFT JOIN, подобного этому?

Обновить:

 SELECT id, Request_By, Org_Name, Branch_Name, SALES_PERSON, Is_Consignee,    Is_Shipper, EmailId, Telephone, Credit_LimitRS, IE_Code_No,
PAN_No, Credit_limitDAYS, GL_Link 
FROM mst_ship_con_newcust
  JOIN mst_branch_info b ON b.id = mst_ship_con_newcust.id
ORDER BY id desc
  

Затем просто ПРИСОЕДИНЯЙТЕСЬ

Комментарии:

1. Спасибо, но я хочу показать, где mst_ship_con_newcust.id в том, чтобы не выходить из b.id , но все же

2. LEFT необходимо, чтобы ограничить вывод «пока не существует …».

Ответ №2:

Необычно объединять две таблицы id . Какова история разработки этой схемы?

Убедитесь id , что в обеих таблицах индексы начинаются с, затем попробуйте

 SELECT  y.id, y.Request_By, y.Org_Name, y.Branch_Name, y.SALES_PERSON,
        y.Is_Consignee, y.Is_Shipper, y.EmailId, y.Telephone,
        y.Credit_LimitRS, y.IE_Code_No, y.PAN_No, y.Credit_limitDAYS,
        y.GL_Link
    FROM  
    (
        SELECT  n.id
            FROM  mst_ship_con_newcust AS n
            LEFT JOIN  mst_branch_info AS b  ON b.id = n.id
            WHERE  b.id IS NULL 
    ) AS x
    JOIN  mst_ship_con_newcust AS y USING (id)
    ORDER BY  id desc