MySQL с использованием индексов в оперативной памяти;почему диски работают? - PullRequest
0 голосов
/ 21 февраля 2011

У меня есть индексы 800M и я приказал MySQL использовать 1500M RAM.После запуска MySQL он использует 1000M на Windows 7 x64.

Я хочу выполнить этот запрос:

SELECT oo.* FROM table o 
LEFT JOIN table oo ON (oo.order = o.order  AND oo.type="SHIPPED") 
WHERE o.type="ORDERED" and oo.type IS NULL

Он находит все товары, которые еще не были отправлены.План выполнения говорит мне это:

фотография http://i56.tinypic.com/23s6b11.png

Мои индексы:

  • type_order: многократный индекс с type и order
  • order_type с order в качестве первого значения индекса, за которым следует type

Так что MySQL должен использовать индекс type_order из ОЗУ, а затем выбрать несколько записейс индексом order_type.Я ожидаю только около 1000 не доставленных товаров, поэтому этот запрос должен быть очень быстрым, но это не так.Диски сходят с ума ....

Что я делаю не так?

1 Ответ

0 голосов
/ 22 декабря 2011

Запрос говорит SELECT sometable.*, поэтому для 1000 совпадающих строк будет 1000 выборок всех полей из таблицы. Независимо от того, полностью ли загружены индексы частей * 1002 в оперативную память, некоторым это поможет. Поля данных все еще должны быть получены. Скорее всего, они разбросаны по всему диску. Так что, конечно, диск (ы) будет выполнять тысячи маленьких операций чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...