|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
Подскажите пожалуйста Есть таблицы table1(id number, amount number); table2(id number, amount number); table3 (id number, table_id number); Есть индексы для table1 и table2 create unique index pk_table1 on table1(id); create unique index pk_table2 on table2(id); Почему следующий запрос не использует индексы pk_table1 и pk_table2 а прогоняет все записи таблиц table1 и table2 TABLE_ACCESS_FULL Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9.
При чем если вместо подзапроса (select max(table_id) from table3 where id = 1) указать конкретное значение, то индексы прекрасно используются. В чем подвох? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 11:14 |
|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
Loky1987, если заменить на union ALL , тож индекс не используется? ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 12:34 |
|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
Loky1987 В чем подвох? В "проталкивании" предикатов. Попробуйте Код: plsql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 12:43 |
|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
Stax, Пробовал не спасает Нашел статью https://docs.oracle.com/cd/B10501_01/server.920/a96533/opt_ops.htm#1005867] Значит ли это, что нет вариантов использовать индекс? Таблицы огромные, фулскан тяжелый очень. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 13:47 |
|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
andrey_anonymous, Да, так работает, но мне такой вариант не подходит, так выборка с юнионом это вьюха на самом деле Код: plsql 1. 2. 3. 4.
И эта вьюха много где используется, а под каждый случай делать отдельные вьюхи вот прям плохо. Сори если ввел в заблуждение. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 14:02 |
|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
Loky1987, Нет, конечно, есть разные варианты: переписать через джойн или прохинтовать так чтобы преобразовалось в джойн, или переписать через in и прохинтовать через precompute_subquery ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 14:04 |
|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
Loky1987 И эта вьюха много где используется, union действительно нужен без ALL? ето ж дистинкт на "Таблицы огромные" ..... stax ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 14:06 |
|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
Loky1987, Если table3.id уникально, то: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.
Если table3.id не уникально, то: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92.
Понятно, что join тоже поможет. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2021, 23:12 |
|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
Простенький трюк: добавляем выделенное Код: plsql 1. 2.
и все работает само без уникальностей и прочего: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21.
до Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55.
и после 16 Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2021, 03:53 |
|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
тестовый скрипт на попробовать: https://gist.github.com/xtender/213cc6f3ee724205d5fd061952661ffd ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2021, 03:54 |
|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
Будем знать. Я пытался коррелировать, но делал не так, потому unnest не проходил. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2021, 14:58 |
|
Не работает индекс при соединении union
|
|||
---|---|---|---|
#18+
Ох, спасибо большое за ответы. Сейчас буду переваривать. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2021, 09:58 |
|
|
start [/forum/topic.php?fid=52&msg=40123525&tid=1879641]: |
0ms |
get settings: |
24ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
52ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
324ms |
get tp. blocked users: |
1ms |
others: | 309ms |
total: | 740ms |
0 / 0 |