Полезен ли индекс базы данных, если запрос возвращает все строки? - PullRequest
1 голос
/ 24 сентября 2010

Если я использовал столбец индекса в запросе, который возвращает все строки, выгодно ли использовать столбец индекса в предложении where?

Например, выберите * из таблицы1, где Зарплата> 1;

Если зарплата всех сотрудников превышает 1, выгодно ли использовать столбец «Индекс» в предложении «где»?

Индексируются ли большие накладные расходы при вставке, если база данных, скорее всего, будет использоваться, как указано выше?

Ответы [ 4 ]

4 голосов
/ 24 сентября 2010

Индексы бесполезны, когда вы выполняете полное сканирование без ORDER BY.Упорядоченная таблица индекса Oracle, таблица кластеров Postgresl, кластерный индекс MySQL (InnoDB) PRIMARY KEY: обеспечивает большую производительность для ORDER BY.База данных, скорее всего, будет использоваться, как указано выше?Если индекс помещается в ОЗУ, все в порядке.

0 голосов
/ 18 июля 2012

Интересно, правильный ли ответ @ iddqd.

Критерий "WHERE Salary>` "потребовал бы индекс, не так ли?

Как MySQL знает, что всеоклады превышают 1, если только он а) не имеет индекса или б) выполняет полное сканирование таблицы?

Если вы точно знаете, что вам потребуется выполнить полное сканирование таблицы, вы можете использовать:

IGNORE INDEX ([*index_list*])

Примечание. MySQL не обращает внимания на указанную выше директиву для ORDER BY и GROUP BY до версии 5.1.17.

0 голосов
/ 24 сентября 2010

Форма вопроса кажется немного запутанной. Я не думаю, что вы действительно спрашиваете, выгодно ли использовать определенное предложение WHERE. Конечно, если вы хотите вернуть строки, где Salary> 1, то лучше указать это - иначе вы можете не получить то, что ожидаете (данные могли измениться)!

Я предполагаю, что вы действительно хотите спросить, может ли этот запрос работать с индексом лучше, чем без него. Я не думаю, что у нас обязательно есть достаточно информации, чтобы ответить на это. Мы не знаем, какую СУБД вы используете, как хранятся таблицы или какой тип индекса может использоваться. Например, если запрос является запросом к представлению, а представление индексируется или индексируются таблицы, лежащие в его основе, то индексы могут существенно повлиять на производительность.

Однако обычно указывать SELECT * в запросе обычно не рекомендуется. Указание SELECT * означает, что вы получите все столбцы, даже если набор столбцов изменился. Лучше указывать только те столбцы, которые вам нужны, потому что таким образом у вас больше шансов получить наиболее эффективный план выполнения.

0 голосов
/ 24 сентября 2010

Если ваш запрос возвращает все строки, все столбцы и не имеет упорядочения индекса, этот запрос вообще не поможет. Не было бы смысла помещать поддельные предикаты, которые всегда оценивают как истинные.

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