Вложенное время загрузки выборки в mysql - PullRequest
0 голосов
/ 07 апреля 2009

У меня одна таблица пакетов
Пакет содержит 2 поля id и всего
они оба имеют длину bigint 20 и первичные ключи
только идентификатор - автоинкремент
в каждой записи итого = id
у меня есть 10000 записей, скажем, id = 1 - 10000 и всего = 1 - 10000

я получил 2 почти идентичных запроса: 1 результат за очень долгое время загрузки, а один завершается почти мгновенно.

очень очень долгое время загрузки:

set @i = 0; <br />
SELECT *<br />
FROM packets as p1<br />
WHERE p1.total in ( SELECT p2.total<br />
FROM packets  as p2 where ( ( @i := ( @i + 1 ) ) 

очень короткое время загрузки:

set @i = 0;<br />
SELECT *<br />
FROM packets as p1<br />
WHERE p1.id in ( SELECT p2.id<br />
FROM packets  as p2 where ( ( @i := ( @i + 1 ) ) 

это происходит, когда значения id и total совпадают.

1 Ответ

0 голосов
/ 07 апреля 2009

они оба имеют длину bigint 20 и первичные ключи

Вы не можете иметь два первичных ключа в одной таблице.

Похоже, у вас нет индекса на packets.total

Создайте его и посмотрите, поможет ли это:

CREATE INDEX ix_packets_total ON packets (total)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...