2013-10-07 1 views
0

Я новичок в использовании firebird. У меня 3 таблицы.Как создать индекс в firebird для улучшения запроса select

для T_TABLE1 структура показана ниже:

enter image description here

для T_TABLE2 структура показана ниже:

enter image description here

и T_TABLE3 структура

enter image description here

первичный ключ является ID от T_TABLE1 к TBL1_ID в T_TABEL2 и TBL1_ID в T_TABLE3. Как я могу выбрать объединение данных с этими 3 таблицами, и я хочу использовать индекс для лучшего запроса выбора, но я не знаю, как создать индекс, потому что я новичок в использовании firebird, и я хочу узнать больше об использовании firebird. Надеюсь, мои объяснения понятны.

+0

У вас есть внешние ключи от 'T_TABEL2.TBL1_ID' до' T_TABLE1.ID' (и то же самое для 'T_TABLE3.TBL1_ID')? Если это так, дополнительных добавочных индексов нет. И для документации см. Http://www.firebirdsql.org/en/reference-manuals/ –

ответ

2

Синтаксис для создания индекса документирован в справочнике по языку Firebird 2.5, CREATE INDEX, а также содержит дополнительную информацию.

Синтаксис для создания индекса является:

CREATE [UNIQUE] [ASC[ENDING] | [DESC[ENDING]] INDEX indexname 
    ON tablename 
    { (<col> [, <col> ...]) | COMPUTED BY (expression) } 

<col> ::= a column not of type ARRAY, BLOB or COMPUTED BY 

Таким образом, для создания (по возрастанию) индекс T_TABEL2.TBL1_ID вы могли бы сделать:

CREATE INDEX ix_tabel2_tbl1_id ON T_TABEL2 (TBL1_ID) 

Но, как я отметил ранее сегодня, что не является необходимым если в этом столбце есть внешний ключ, поскольку внешние ключи в Firebird автоматически получают индекс (то же самое относится к первичным ключам).

С вашего вопроса неясно, есть ли у вас внешние ключи, но я бы посоветовал вам создавать их вместо индекса: он дает вам индекс и, кроме того, устанавливает, что значение TBL1_ID действительно существует в T_TABLE1.

Просто имейте в виду, что создание индекса автоматически не улучшает производительность. Оптимизатор, например, может решить, что использование индекса не стоит усилий (или что конкретный индекс не относится к запросу).

+0

Хорошо, сэр. Благодаря! У меня нет внешнего ключа в моих таблицах. Я создам внешний ключ. Сэр, если у меня уже есть внешний ключ, как я могу использовать запрос SELECT с помощью INDEX? Спасибо, сэр. Я действительно не знаю, как использовать INDEX. Но я начинаю читать руководства и учебные пособия, но другие еще не ясны. Я читал об использовании «PLAN». БЛАГОДАРЯ! – aiipee

+0

Firebird сама будет автоматически выбирать индекс, если он имеет значение (и ожидается, что он улучшит производительность).Вы можете указать явный план, если считаете, что Firebird ошибочен, но это расширенный материал, который можно лучше игнорировать, если вы новичок в нем. –

Смежные вопросы