Имеет ли смысл составлять индекс из 2 столбцов, если один из столбцов имеет логический тип данных? - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть 2 столбца, один столбец внешнего ключа, а другой - логический столбец. Оба используются в предложении WHERE. (WHERE foreignId = ? AND approved = TRUE;. , Но что, если вы включите такой столбец / поле в составной индекс вместе с вышеупомянутым столбцом внешней клавиши? Будет ли результирующий составной индекс достаточно уникальным? Или мне лучше создать индекс только для столбца Foreignkey?

Спасибо

1 Ответ

0 голосов
/ 04 апреля 2020

Краткий ответ: Да.

Длинный ответ:

Индекс с одним столбцом для столбца с низким числом элементов (логическое / enum / et c) редко используется. Но многостолбцовый индекс, в том числе такой, вероятно, будет полезен, иногда очень эффективен.

Количество элементов (селективность) каждого столбца в многостолбцовом индексе не имеет значения. И не имеет значения, в каком порядке вы помещаете их в указатель.

Один пример очень эффективен:

WHERE foreignId = ? AND approved = TRUE
ORDER BY foo
LIMIT 10

вместе с

INDEX(foreignId, approved,  -- in either order
      foo)

В этом случае он может выполнить всю фильтрацию, затем перейти на ORDER BY и избежать сортировки. Но что более важно, он может остановиться после 10 рядов. Без этого индекса он мог бы собрать тысячи строк, отсортировать их и затем очистить 10.

Внешние ключи ... Убедитесь, что у вас есть составной ключ, независимо от того, есть ли у вас FK. Одиночный столбец FK должен заметить, если у вас есть составной индекс , начинающийся с этого столбца, и не создавать дополнительный индекс.

Дополнительные обсуждения: http://mysql.rjweb.org/doc.php/index_cookbook_mysql

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