MySQL (Мария)
Я создал индекс для двух столбцов.
entpcd -- Entity Type Code
enid -- Entity ID
Будет ли MySQL автоматически использовать этот индекс для этого запроса?
SELECT * FROM table_name WHERE entpcd='PN'
.. или мне нужно определить отдельный индекс с одним полем для entpcd
, чтобы SELECT
работал хорошо?
Ссылка: mysqltutorial.org/mysql-индекс/mysql-составной-индекс "Оптимизатор запросов использует составные индексы для запросов, проверяющих все столбцы в индексе, или запросов, проверяющих первые столбцы, первые два столбца и т. д.". Поскольку entpcd
является первым столбцом в индексе, дальнейший индекс не требуется.
Если MySQL решит использовать индекс для этого запроса, то созданный вами индекс будет считаться тем, который он может использовать.
Я ужасно расплывчат, потому что оптимизатор будет делать то, что делает оптимизатор. Но если у вас достаточно строк в таблице и это единственный доступный индекс, он сможет использовать этот индекс.
Другими словами: оптимизатору требуется только entpcd
для запроса это; среди всех INDEXes
он выберет тот Начало с entpcd
.
Он будет использовать индекс entpcd (первый столбец), но все равно должен выполнять поиск по ключу, чтобы получить остальные столбцы (SELECT *)