У меня есть таблица MEMORY с примерно 650 строками, длиной данных 5 МБ, длиной индекса 60 кБ (так что это довольно мало). Он имеет один основной (хэш) ключ SMALLINT и около 90 других столбцов (ints, varchars, datetimes, no blobs или text). (EDIT: есть также хэш-ключ на колонке BIGINT.)Простой константный выбор на первичном ключе в маленькой таблице MEMORY очень медленный
Я бегу этот запрос (с PHP) довольно часто (около 10 раз в секунду):
выберите * из userek, где идентификатор = {CONST_ID} и kitiltva = 0 и kitiltva_meddig < "{CONST_DATETIME}" и inaktiv = 0
Примечание: id
является первичным ключом. Мне нужен *
, потому что результат используется во многих разных местах, и в основном все столбцы используются здесь или там.
Моя проблема: запрос становится ненормально медленным на регулярной основе. Около 0.5s
в среднем, 8s
макс. В большинстве случаев это очень быстро: 75%
работает быстрее, чем 3ms
, 85%
быстрее среднего. Но 15%
он медленнее среднего, 13%
медленнее, чем 1s
. Так что у него длинный хвост.
И я понятия не имею, что может вызвать это. Кто-нибудь думает?
Нет других указателей на столе, кроме ПК? –
О, есть еще один хэш-индекс в столбце BIGINT. Вот и все. – Cucu
Индекс BTREE на '(id, kitiltva, inaktiv, kitiltva_meddig)' будет наиболее подходящим для этого запроса. Но я не работал с таблицами MEMORY, поэтому кто-то, у кого больше опыта, может посоветовать, если это (добавление индекса) было бы уместным в этом случае. –