#mysql #sql
#mysql #sql
Вопрос:
Я пытаюсь получить результат с помощью приведенного ниже запроса, но для его извлечения требуется около 2 минут
SELECT *
FROM customer e
WHERE e.id=324
AND e.g_id IN('x133fv','be6544','e992170','93611c')
and e.enrol_id =
(
select e1.enrol_id
from customer e1
WHERE e1.id=324
AND e1.g_id=e.g_id
ORDER BY update_time DESC, posted_time DESC, enrol_id DESC
LIMIT 1
)
У меня есть индекс (g_id, id)
Есть ли какой-либо другой способ получить результат через СОЕДИНЕНИЕ?
Комментарии:
1. Я согласен с Гордоном в этом. Не ищите другого способа. Этот запрос выглядит хорошо и хорошо читается. Если это занимает слишком много времени, вам следует взглянуть на план ОБЪЯСНЕНИЯ и попытаться выяснить, можно ли сделать его эффективным, добавив индекс. Поскольку у вас есть 2 условия равенства для id и g_id и order by для еще 3 столбцов, предложение Гордона о добавлении составного индекса из 5 столбцов может очень хорошо решить ваши проблемы.
2. Frazz, индекс Гордона просто помог мне выиграть 6 секунд от общего времени вывода 2min. 🙁
Ответ №1:
Это ваш запрос:
SELECT *
FROM customer e
WHERE e.id = 324 AND
e.g_id IN ('x133fv','be6544','e992170','93611c') and
e.enrol_id = (select e1.enrol_id
from customer e1
WHERE e1.id=324 AND e1.g_id=e.g_id
ORDER BY update_time DESC, posted_time DESC, enrol_id DESC
LIMIT 1
)
Вы можете повысить производительность с помощью индексов. Я бы предложил: customer(id, g_id, update_time, posted_time, enrol_id)
.
Комментарии:
1. Спасибо за ответ… Но возможно ли получить СОЕДИНЕНИЕ, а не подзапрос?
2. Я добавил этот индекс, но все еще использую старый индекс (g_id, id). Также анализировал таблицу несколько раз и тоже индексировал ПРИНУДИТЕЛЬНО, но все равно занимал столько же времени..
3. @user3752021 . , , Когда я смотрю на запрос, необходим только один индекс.
4. Новый индекс клиента (id, g_id, update_time, posted_time, enroll_id) помог выиграть всего 6 секунд от первоначального времени вывода 2min. 🙁 любой другой вариант для сокращения времени.
5. @user3752021 . . . Попробуйте сделать это:
customer(g_id, id, update_time, posted_time, enrol_id)