У меня есть таблица (50 миллионов строк), в которой есть индексы по column_a и column_b
когда я делаю select count(*) from table where column_a in (list_a)
, я сразу получаю результаты.
То же самое с select count(*) from table where column_b in (list_b)
.
Но, когда я делаю
select count(*) from table where column_a in (list_a) or column_b in (list_b)
Мои запросы становятся безумно медленными и последние полчаса перед выводом правильного числа ... Я что-то делаю не так? Как я могу оптимизировать фактическое поведение этого запроса?
Спасибо!
План запроса 1:
Plan hash value: 2471097773
-------------------------------------------------------------
| Id | Operation | Name |
-------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SORT AGGREGATE | |
| 2 | NESTED LOOPS | |
| 3 | SORT UNIQUE | |
| 4 | TABLE ACCESS FULL | LIST_A |
| 5 | BITMAP CONVERSION COUNT | |
| 6 | BITMAP INDEX SINGLE VALUE| MY_TABLE_IX02 |
-------------------------------------------------------------
План запроса 2
Plan hash value: 1870911518
-------------------------------------------------------------
| Id | Operation | Name |
-------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SORT AGGREGATE | |
| 2 | NESTED LOOPS | |
| 3 | SORT UNIQUE | |
| 4 | TABLE ACCESS FULL | LIST_B |
| 5 | BITMAP CONVERSION COUNT | |
| 6 | BITMAP INDEX SINGLE VALUE| MY_TABLE_IX05 |
-------------------------------------------------------------
План запроса 3:
Plan hash value: 1821967683
----------------------------------------------------------------
| Id | Operation | Name |
----------------------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SORT AGGREGATE | |
| 2 | FILTER | |
| 3 | VIEW | index$_join$_001 |
| 4 | HASH JOIN | |
| 5 | BITMAP CONVERSION TO ROWIDS| |
| 6 | BITMAP INDEX FULL SCAN | MY_TABLE_IX02 |
| 7 | BITMAP CONVERSION TO ROWIDS| |
| 8 | BITMAP INDEX FULL SCAN | MY_TABLE_IX05 |
| 9 | TABLE ACCESS FULL | LIST_A |
| 10 | TABLE ACCESS FULL | LIST_B |
----------------------------------------------------------------
table
? Что такоеcolumn_a
иlist_a
? Какие у вас индексы наlist_a
? И Т. Д. - person Patrick Hofman   schedule 26.02.2015EXPLAIN PLAN
? Oracle использует ваши индексы? Вы пробовали добавить комбинированный индекс для column_a, column_b? - person Frank Schmitt   schedule 26.02.2015BITMAP INDEX SINGLE VALUE
vsBITMAP INDEX FULL SCAN
. Вы использовали одно и то же предложениеIN
для обоих тестов? - person Frank Schmitt   schedule 26.02.2015