Время загрузки вложенного выбора в mysql
Вопрос
У меня есть одна таблица пакетов
пакеты содержат 2 поля id и total
это как bigint длиной 20, так и первичные ключи
автоматически увеличивается только идентификатор
в каждой записи итого = идентификатор
у меня есть 10000 записей, скажем, id = 1-0000 и total = 1-0000
я получил 2 почти идентичных запроса: 1 приводит к очень-очень длительной загрузке, а один завершается почти мгновенно.
очень-очень долгое время загрузки:
set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.total in ( SELECT p2.total
FROM packets as p2 where ( ( @i := ( @i + 1 ) )
очень короткое время загрузки:
set @i = 0;
SELECT *
FROM packets as p1
WHERE p1.id in ( SELECT p2.id
FROM packets as p2 where ( ( @i := ( @i + 1 ) )
это происходит, пока значения id и total идентичны.
Решение
это как bigint длиной 20, так и первичные ключи
У вас не может быть двух первичных ключей в одной таблице.
Похоже, что у вас нет индекса на packets.total
Создайте его и посмотрите, поможет ли это:
CREATE INDEX ix_packets_total ON packets (total)
Не связан с StackOverflow