#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