Индексирование десятичной колонки Laravel

Я использую общеизвестный алгоритм reddit «hot» на моих «столбах» таблицы. Теперь этот горячий столбец представляет собой десятичное число, подобное этому: «XXXXX, XXXXXXXX»

Я хочу, чтобы этот столбец был индексом, потому что, когда я заказываю «горячим», я хочу, чтобы запрос был как можно быстрее. Однако я новичок в индексах. Нужен ли уникальный индекс?

Если он должен быть уникальным, будет ли это работать и быть эффективным?

$table->unique('id', 'hot'); 

Если это не должно быть уникальным, будет ли это правильным подходом?

 $table->index('hot'); 

Последний вопрос: может ли следующий запрос использовать индекс?

  Post::orderBy('hot', 'desc')->get() 

Если нет, как мне его изменить?

Большое спасибо!

Не делайте это UNIQUE, если вам не требуется ограничение, в котором вы не можете вставлять дубликаты.

По-разному, ключ UNIQUE – это две вещи: INDEX (для быстрого поиска) и «ограничение» (чтобы дать ошибку при попытке вставить дубликат).

ORDER BY hot DESC может использовать INDEX(hot) (или UNIQUE(hot) ). Я говорю «может», а не «будет», потому что есть другие проблемы, когда Оптимизатор может решить не использовать индекс. (Не видя фактического запроса и не зная больше о наборе данных, я не могу быть более конкретным).

Если id является PRIMARY KEY , то ни одно из них не имеет никакого значения: INDEX(id, hot) ; UNIQUE(id, hot) . Подмена порядка столбцов имеет смысл. Или просто INDEX(hot) .

Оговорка: EXPLAIN не говорит, используется ли индекс для ORDER BY , только для WHERE . С другой стороны, EXPLAIN FORMAT=JSON дает более подробную информацию. Попробуй это.

(Да, столбцы DECIMAL могут быть проиндексированы.)