Подсказка в SQL-запросе

Подсказка в SQL-запросе

Подсказка в SQL-запросе, иначе Хинт (англ. Hint) — средство языка запросов, позволяющее явным образом влиять на план запроса.

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

Синтаксис и набор подсказок не описан в стандарте SQL, он сильно зависит от конкретной реализации СУБД.

Можно выделить следующие, общие для многих РСУБД, назначения подсказок:

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

Содержание

Особенности подсказок РСУБД Microsoft SQL Server

Подсказки представляют собой расширение языка c собственными ключевыми словами.

Примеры

SELECT *
FROM Customers C WITH (INDEX=City)
INNER LOOP JOIN Orders O ON O.CustomerID = C.CustomerID
WHERE C.City = 'Madrid'

в этом запросе для Microsoft SQL Server две подсказки:

  • LOOP — указывает, что соединять таблицы следует методом вложенных циклов
  • WITH (INDEX=City) — указывает, что для доступа к таблице Customers следует использовать индекс с названием City

Особенности подсказок РСУБД Oracle

В Oracle подсказки вставляются в текст запроса как комментарий. Текст комментария анализируется, и если обнаруживается, что это приемлемый хинт, он принимается. Благодаря такому синтаксису, запрос с подсказками может выполняться на другой СУБД без модификации, однако ответственность за оптимизацию плана в этом случае будет целиком лежать на СУБД. При таком подходе, опечатка в подсказке приводит к тому, что подсказка рассматривается сервером как простой комментарий.[1]

Примеры

 SELECT  /*+ full(t) */ t.name FROM tbl1 t WHERE t.DATE = SYSDATE
 SELECT  /*+ index(t ind_date) */ t.name FROM tbl1 t WHERE t.DATE = SYSDATE

Здесь приведены подсказки:

  • /*+ full(t) */ — указывает, что поиск нужно вести сканированием всей таблицы
  • /*+ index(t ind_date) */ — указывает, что поиск нужно вести по конкретному индексу

Особенности подсказок РСУБД MySQL

В версии MySQL 3.23.12 можно указывать, какие именно индексы (ключи) MySQL должен применять для извлечения информации из таблицы. [2]

 TABLE_NAME [[AS] alias] [[USE INDEX (key_list)] | [IGNORE INDEX (key_list)] | FORCE INDEX (key_list)]]

Примечания


Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Полезное


Смотреть что такое "Подсказка в SQL-запросе" в других словарях:

  • Подсказка (значения) — Подсказка: Подсказка как элемент пользовательского интерфейса Подсказка в SQL запросе …   Википедия

  • Подсказка — У этого термина существуют и другие значения, см. Подсказка (значения). Подсказка  дополнительная информация к задаче или проблеме, позволяющая найти правильное решение. Подсказка в компьютерных интерфейсах В компьютерных интерфейсах… …   Википедия

  • Oracle Database — У этого термина существуют и другие значения, см. Oracle (значения). Oracle Database Тип …   Википедия

  • Oracle (СУБД) — У этого термина существуют и другие значения, см. Oracle. Oracle Database Тип Объектно реляционн …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»