Таблица запросов Sybase select со спецификатором numeri c - PullRequest
0 голосов
/ 07 августа 2020

В процедуре sybase я вижу запрос SQL, как показано ниже

select max(mycolumn) from mytable (2) where id = @param1

Что это такое (2) означает

Если я хочу переписать это SQL на oracle процедура, как мне это сделать

1 Ответ

1 голос
/ 08 августа 2020

Предполагая, что это Sybase ASE ... <table_name> (X) - указание индекса, в котором говорится об использовании индекса (в таблице <table_name>) с идентификатором индекса = X (sysindexes.indid=X). В вашем примере подсказка говорит об использовании индекса с indid=2.

Если нет индекса с indid=2, тогда оптимизатор проигнорирует эту подсказку и go о попытке определить, что (если есть) индекс для использования.

Для перехода на Oracle (или любую другую СУБД в этом отношении) просто удалите (2).

Хотя ASE, очевидно, поддерживает эту функцию, не рекомендуется использовать ее, если вы не знаете со 100% уверенностью, что желаемый индекс всегда будет иметь indid=2. Со временем, по мере добавления / удаления индексов (включая те, которые поддерживают ограничения PK / UNIQ), indid, присвоенный определенному индексу c, может измениться; последнее, что вам нужно (с точки зрения производительности), - это принудительно использовать неправильный индекс (ie, indid=2 больше не ссылается на какой-либо индекс, который разработчик SQL хотел использовать).

...