Должен ли я использовать индекс с этим запросом? - PullRequest
0 голосов
/ 26 октября 2011

У меня есть вопрос относительно индекса,

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

Схема Таблица бронирования

 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 BID                                       NOT NULL NUMBER(16)
 CID                                                NUMBER(16)
 FNO                                                NUMBER(16)
 OID                                                NUMBER(16)
 SEAT                                               NUMBER(6)
 SEAT_PRICE                                         NUMBER(6)
 FLIGHT_DATE                                        DATE

покупатель

 CID                                       NOT NULL NUMBER(16)
 FIRSTNAME                                 NOT NULL VARCHAR2(10)
 LASTNAME                                  NOT NULL VARCHAR2(10)
 STREET                                    NOT NULL VARCHAR2(20)
 TOWN                                      NOT NULL VARCHAR2(10)

Запрос

SELECT bo.bid, cu.cid 
FROM ass2master_booking bo, ass2master_customer cu 
WHERE bo.cid = cu.cid and rownum < 135000; 

Мой вопрос: действительно ли это делаеткакая разница, добавляю ли я индекс в CID, ссылаясь на запрос?

Я добавил его, потому что он соединяется и выбирается.

Я проверил этот запрос с неструктурированными данными (без индекса), и ЦП существенно не уменьшился, но столбец диска в файле трассировки уменьшился с 1800 до 337.

Неструктурированный диск был 1800,с индексом 337.

По индексу выполняется быстрое полное сканирование таблицы клиента.

Ответы [ 2 ]

2 голосов
/ 26 октября 2011

Ответ положительный, если это повышает производительность.

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

1 голос
/ 26 октября 2011

1) Я не вижу столбец CID в таблице CUSTOMER, который вы описали, что немного сбивает с толку. Возможно, ваш запрос предназначен для ссылки на столбец FNO или, возможно, существует столбец CID, который вы случайно обрезали из вывода команды DESCRIBE.

2) Сколько строк в таблице? Вы выбираете произвольные 135 000 строк, и у вас нет никаких значимых предикатов, поэтому индекс не будет особенно полезен, кроме как охватывающий индекс, чтобы Oracle мог сканировать индекс, а не сканировать таблицу. Но это преимущество исчезнет, ​​если вам нужно будет добавить дополнительные столбцы в список SELECT.

3) Исходя из того, что вы отправили запрос, я не понимаю, почему вы присоединяетесь к таблице CUSTOMER. У BOOKING есть и BID, и CID, поэтому объединение, похоже, не приносит никакой пользы. Возможно, целью было присоединиться к таблице CUSTOMER, чтобы можно было добавить дополнительные столбцы в список SELECT. Однако в этом случае преимущество индекса покрытия может быть потеряно (если, конечно, вы не добавите в индекс и дополнительные столбцы)

...