Подтвердить что ты не робот

Как использовать индекс в инструкции select?

Давайте скажем в таблице employee, я создал индекс (idx_name) в столбце emp_name таблицы.

Нужно ли явно указывать имя индекса в предложении select или оно будет автоматически использоваться для ускорения запросов.

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

4b9b3361

Ответ 1

Если вы хотите проверить индекс, чтобы увидеть, работает ли он, вот синтаксис:

SELECT *
FROM Table WITH(INDEX(Index_Name))

Оператор WITH заставит использовать индекс.

Ответ 2

Хороший вопрос,

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

Чтобы иметь возможность ответить на ваш конкретный вопрос, вы должны указать используемую вами БД.

Для MySQL вы хотите прочитать документацию Index Hint Syntax о том, как это сделать

Ответ 3

Как использовать индекс в выражении select?
следующим образом:

   SELECT * FROM table1 USE INDEX (col1_index,col2_index)
    WHERE col1=1 AND col2=2 AND col3=3;


SELECT * FROM table1 IGNORE INDEX (col3_index)
WHERE col1=1 AND col2=2 AND col3=3;


SELECT * FROM t1 USE INDEX (i1) IGNORE INDEX (i2) USE INDEX (i2);

И многое другое проверяет this

Нужно ли явно указывать?

  • Нет, нет необходимости явно указывать.
  • Механизм БД должен автоматически выбирать индекс для использования на основе планов выполнения запросов, которые он строит из ответа @Tudor Constantin.
  • Оптимизатор будет судить, будет ли использовать ваш индекс, чтобы ваш запрос выполнялся быстрее, и если это так, он будет использовать индекс. из ответа @niktrl

Ответ 4

В целом, индекс будет использоваться, если предполагаемая стоимость использования индекса и, возможно, необходимость выполнять дальнейшие проверки по закладкам ниже стоимости всего сканирования всей таблицы.

Если ваш запрос имеет форму:

SELECT Name from Table where Name = 'Boris'

И 1 ряд из 1000 имеет имя Борис, он почти наверняка будет использоваться. Если все зовут Борис, он, вероятно, прибегнет к сканированию таблицы, поскольку индекс вряд ли станет более эффективной стратегией доступа к данным.

Если это широкая таблица (много столбцов) и вы делаете:

SELECT * from Table where Name = 'Boris'

Затем он все же может выбрать выполнить сканирование таблицы, если разумное предположение о том, что потребуется больше времени на извлечение других столбцов из таблицы, вместо того, чтобы просто искать имя или снова, если оно может всегда получайте много строк.

Ответ 5

Оптимизатор будет судить, будет ли использовать ваш индекс, чтобы ваш запрос выполнялся быстрее, и если это так, он будет использовать индекс.

В зависимости от вашей РСУБД вы можете принудительно использовать индекс, хотя это не рекомендуется, если вы не знаете, что делаете.

В общем, вы должны индексировать столбцы, которые вы используете в объединении таблиц, и где инструкции

Ответ 6

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

Однако в MSSQL вы можете указать index hint, который может указать, что для выполнения этого запроса должен использоваться конкретный индекс. Более подробную информацию об этом можно найти здесь.

index hint также представляется доступным для MySQL. Благодаря Тудору Константину.

Ответ 7

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

SELECT * FROM TABLE WHERE attribute = 'value'

Будет использовать соответствующий индекс.