Основываясь на неполной спецификации, я бы сделал это:
CREATE UNIQUE INDEX stock_UX1 ON stock (storeid,seedid,stk)
Этот индекс удовлетворил бы требованию индекса с storeid
в качестве ведущего столбца. (И мы знаем, что это требование будет иметь место, если это InnoDB, а storeid
является внешним ключом.)
С такой короткой строкой таблицы я бы сделал ее покрывающим индексом и включил все столбцы. Затем запросы могут выполняться непосредственно со страниц индекса без поиска страниц данных в базовой таблице.
Поскольку мы знаем, что (seedid,storeid)
уникален (указанный как ПЕРВИЧНЫЙ КЛЮЧ), мы знаем, что (storeid,seedid)
также уникален, поэтому мы могли бы также объявить индекс УНИКАЛЬНЫМ.
Есть и другие варианты; нам не нужно создавать этот индекс выше. Мы могли бы просто сделать это вместо этого:
CREATE INDEX stock_IX2 ON stock (storeid)
Но это будет использовать почти такой же объем пространства и не будет так полезно для максимально возможного количества запросов.
Вторичный индекс будет содержать первичный ключ таблицы; так что второй индекс будет включать столбец seedid
, учитывая ПЕРВИЧНЫЙ КЛЮЧ таблицы. То есть индекс эквивалентен этому:
CREATE INDEX stock_IX3 ON stock (storeid,seedid)
И мы знаем, что комбинация этих двух столбцов уникальна, поэтому мы можем включить ключевое слово UNIQUE.
CREATE UNIQUE INDEX stock_UX4 ON stock (storeid,seedid)
Если мы выполним EXPLAIN для запроса формы
EXPLAIN
SELECT t.storeid
, t.seedid
, t.stk
FROM stock t
WHERE t.storeid = 'foo'
мы, вероятно, увидим операцию сканирования диапазона на вторичном индексе; но для получения значения столбца stk
потребуется поиск страниц данных в базовой таблице. Включение столбца stk
во вторичный индекс сделает этот индекс покрывающим индексом для запроса. Поскольку в ответе впервые рекомендуется индекс, мы ожидаем, что вывод EXPLAIN
покажет «Использование индекса».
person
spencer7593
schedule
20.02.2019
storeid
является внешним ключом и должен быть проиндексирован. - person Paul Spiegel   schedule 20.02.2019seedid
на магазин будет около 65000, поэтомуstoreid
будет повторяться столько раз.storeid
будет около 12000. Должен ли я продолжить и проиндексировать его? - person lmao   schedule 20.02.20190
:) - person lmao   schedule 21.02.2019