|
|
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
Есть ли стандартная реализация поиска на предмет вхождения значения в интервал, границы которого лежат в таблице? Код: plsql 1. 2. 3. Выполняется FULL SCAN по таблице - можно переписать запрос на индексный поиск? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2016, 16:34 |
|
||
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
Сорри, ткните, плиз, А ты индекс-то создал? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2016, 16:40 |
|
||
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
Сорри, ткните, плиз, кроме индекса, еще неплохо бы колонки min_val и max_val сделать NOT NULL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2016, 17:02 |
|
||
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
Нет, в том то и дело, что это не поможет - TABLE ACCESS FULL: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2016, 17:34 |
|
||
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
Если ты уверен в высокой селективности предиката, то можно прибить хинтами. Код: 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. 93. 94. 95. 96. 97. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2016, 17:47 |
|
||
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
Сорри, ткните, плиз, в таблице других ключей нет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2016, 17:54 |
|
||
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
AmKad Если ты уверен в высокой селективности предиката, то можно прибить хинтами. Бросается в глаза, что Optimizer на 3 порядка ошибается в оценке кардинальности (причем ситуация не меняется по крайней мере на 11.2.0.4 - даже при наличии extended stats на column group). Regards Maxim ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2016, 18:18 |
|
||
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
AmKad, это не решение - просто выкидывается пол-диапазона, а хотелось бы больше. andreymx, в реальной таблице есть уникальный индекс на min, max и ещё пару полей - а как это поможет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2016, 18:20 |
|
||
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
Я недавно думал об этом и мне кажется, что B-tree индекс в этом никак не поможет. Насколько я понял подошел бы R-tree, но его можно сделать только для геоданных. Моя задача была аналогичная — найти подсеть для айпи-адреса, в таблице хранятся начало и конец для каждой подсети. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.11.2016, 18:55 |
|
||
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
Maxim DemenkoAmKad Если ты уверен в высокой селективности предиката, то можно прибить хинтами. Бросается в глаза, что Optimizer на 3 порядка ошибается в оценке кардинальности (причем ситуация не меняется по крайней мере на 11.2.0.4 - даже при наличии extended stats на column group). Regards Maxim А на ХЕ не ошибаеться .... : Код: plsql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2016, 02:42 |
|
||
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
Maxim DemenkoAmKad Если ты уверен в высокой селективности предиката, то можно прибить хинтами. Бросается в глаза, что Optimizer на 3 порядка ошибается в оценке кардинальности (причем ситуация не меняется по крайней мере на 11.2.0.4 - даже при наличии extended stats на column group). Regards Maxim А на ХЕ не ошибаеться .... : Код: 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. Ну да B-Tree никак не помог) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2016, 02:46 |
|
||
|
Поиск принадлежности к интервалу - какой стандартное решение?
|
|||
|---|---|---|---|
|
#18+
Сорри, ткните, плизAmKad, это не решение - просто выкидывается пол-диапазона, а хотелось бы больше. ... если ваш пример Код: plsql 1. 2. как-то соотносится с реальными данными, то примите в расчет такие соображения: из rownum-10, rownum+10 возникает гипотеза, что сами по себе длины ваших интервалов небольшие и, может быть, есть "по бизнесу" представление о значении максимально допустимого интервала. Тогда условие поиска может быть задано вообще по отношению только к одной границе интервала. Также может быть полезен явный констрейнт, запрещающий ввод интервалов размером больше максимально допустимого. Для вашего тестового случая, например так Код: plsql 1. тогда запрос Код: plsql 1. 2. 3. 4. 5. имеет все шансы не перебирать "половину индекса", перебирать его всегда в пределах чисел, расположенных в максимально допустимом интервальном окне по отношению к искомой точке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.11.2016, 02:47 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39354764&tid=1886942]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
140ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 439ms |

| 0 / 0 |
