Да, индексы еще важнее, когда вы хотите вернуть только одну строку.
Если вы возвращаете половину строк и ваша система баз данных должна сканировать всю таблицу, эффективность все равно будет на 50%.
Однако, если вы хотите вернуть только одну строку, и ваша система баз данных должна просканировать 1022597 строк, чтобы найти вашу строку, ваша эффективность будет минимальной.
LIMIT 1
действительно предлагает некоторую эффективность в том, что он останавливается, как только находит первую подходящую строку, но ему, очевидно, приходится сканировать огромное количество записей, чтобы найти эту первую строку.
Добавление индекса для каждого из столбцов в предложении WHERE
позволяет вашей системе базы данных избегать сканирования строк, которые не соответствуют вашим критериям. При наличии адекватных индексов вы увидите, что столбец строк в объяснении приблизится к фактическому количеству возвращаемых строк.
Использование составного индекса, охватывающего все четыре столбца в вашем предложении WHERE
, позволяет повысить производительность и уменьшить сканирование, поскольку индекс обеспечит полное покрытие. Составные индексы действительно используют много памяти и негативно влияют на производительность вставки, поэтому вам может потребоваться добавить составной индекс только в том случае, если большой процент ваших запросов неоднократно просматривает одни и те же столбцы, или если вы редко вставляете записи, или это это очень важно для вас, чтобы этот конкретный запрос был быстрым.
Еще один способ повысить производительность - возвращать только те столбцы, которые вам нужны, вместо использования SELECT *
. Если у вас был составной индекс по этим четырем столбцам, и вы вернули только эти четыре столбца, вашей системе баз данных вообще не нужно будет обращаться к вашим записям. Система баз данных может получать все необходимое прямо из индексов.