Таблица не выполняет сканирование индекса - PullRequest
0 голосов
/ 25 октября 2011

Эй, парень, поэтому по какой-то причине моя таблица выполняет быстрое индексное сканирование.

вот мой запрос

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

вот файл трассировки

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


call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      2      0.00       0.00          0          0          0           0
Fetch     9001      0.19       0.41        387       2131          0      134999
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total     9004      0.19       0.41        387       2131          0      134999

Misses in library cache during parse: 0
Optimizer mode: ALL_ROWS
Parsing user id: 5594  

Rows     Row Source Operation
-------  ---------------------------------------------------
134999  COUNT STOPKEY (cr=2131 pr=387 pw=189 time=411804 us)
134999   HASH JOIN  (cr=2131 pr=387 pw=189 time=276737 us)
150000    INDEX FAST FULL SCAN CUSTOMER_CID_IDX (cr=320 pr=315 pw=0 time=263 us)(object   id 332052)
7412    TABLE ACCESS FULL ASS2MASTER_BOOKING (cr=1811 pr=44 pw=0 time=7566 us)

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

  • некластеризованный индекс
  • кластеризованный индекс
  • кластеризованный хэш
  • неструктурированные данные.

И запрос, с которым я решил провести тестирование, приведен выше.

1 Ответ

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

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

Он использует ускоренное полное сканирование индекса вместо полного доступа к таблице, поскольку он находит в индексе все, что ему нужно (cu.cid), и не нуждается в таблице.

Понятия не имею, что вы имеете в виду под

некластеризованный индекс кластеризованный индекс хэш кластеризованных неструктурированных данных.

Обновление:

Я думаю, что эмпирическое правило я использую:

Если вам нужно более 20% таблицы, я ожидаю полного сканирования таблицы. Если вам нужно менее 5% таблицы, я ожидаю некоторый индексный доступ.

Одной из первых вещей, которые я делаю при настройке оператора SQL, является просмотр плана выполнения и проверка количества строк, которые оракул ожидает получить от каждого шага. Если эти цифры совершенно неверны, план выполнения, вероятно, довольно плохой.

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