Вопрос

У меня есть одна таблица пакетов
пакеты содержат 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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top