|
У меня получается что индексы не ускоряют выборку...а наоборот
|
|||
---|---|---|---|
#18+
avedeoНе улавливаю... в чем странность...я хочу видеть результат запроса именно в такой последовательности притом довольно логичной скажем для документа типа например товарный чек: кол-во, цена, сумма. Или вы имеете ввиду что GROUP BY ... стоит не на своем месте...да вроде тоже логично...группируем, потом сортируем. А это у вас игрушечная база? модель данных какая-то странная. у этой таблицы нет внешнего ключа. Вообще я думаю с начало нужно написать верный запрос а потом его уже оптимизировать. Вот представьте, что у вас будет в таблице 2 пары с одинаковым кол-вом и ценой, но товар этот разный. в результате группировки у вас что получится? group by без агрегирующих функций выглядит странновато. и фактически является аналогом distinct но если у вас это левая таблица только для теста оптимальный запрос должен получаться при составном индексе первое поле у которого более селективно (я думаю это будет цена) при этом из выборки нужно выкинуть id-расчета т.к. данное поле не имеет смысла. Результаты разбора запроса в Oracle из примеров видно что ваш вариант вообще не компилируется Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2016, 10:31 |
|
У меня получается что индексы не ускоряют выборку...а наоборот
|
|||
---|---|---|---|
#18+
PPA, спасибо огромное...вы сподвигли меня на изучение индексов...оказывается еще хинты предписывающие оптимизатору движка директиву() hint /*+ .... index(idx1) index(idx2) ... */... использовать (как я понял...тема еще только изучается) только индексы...а потом еще есть какие-то суррогатные индексы, реверсивные индексы...еще предстоит все это понять, попрактиковать и усвоить на практических примерах. Да...изначально...таблица РАСЧЕТ (она ни чем не связана ) была создана с узкой целью определить вычислительные возможности движка - за какое время будет например подсчитано 1000000 записей используемых в вычисляемом поле то есть выполнить всевозможные арифметические действия без выборки и выдать результат (предполагается, что будет много вычислений, с разветвленной системой условий...кучей разных событий итп )...ну и конечно важна скорострельность движка - ну и то же самое...но с различными группировками и сортировками вот как-то так... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.03.2016, 11:04 |
|
У меня получается что индексы не ускоряют выборку...а наоборот
|
|||
---|---|---|---|
#18+
Как-то собирал отовсюду "мурзилку" по Индексам, вот она: ВАЖНО: Запомните "Правило пятнадцати": При выборе из таблицы более 15% её строк - полный просмотр быстрее индекса и наоборот. Всегда создавайте индексы на столбцах, которые: - ЧАСТО используются в условиях WHERE - ЧАСТО используемые для соединения таблиц (WHERE и JOIN) - содержат МАЛО одинаковых значений (разнообразны), но востребованы в WHERE - РЕДКО изменяются (индексы долго перестраиваются) - РЕДКО попадают в INSERT, UPDATE и DELETE - РЕДКО подвергаются функциям типа CAST, LOWER итд. Еще стоит знать когда имеющийся Индекс игнорируется SQL-запросом. Если у вас много SELECT-запросов с условиями, перечисленными ниже - не создавайте индекс, т.к. он будет просто мешать: Поле1 >, <, >=, <=, <>, != Поле2 Поле IS NULL, Поле IS NOT NULL Поле NOT IN (Значение1, Значение2) Поле1 LIKE '%строка' (но для Поле1 LIKE 'строка%' и Поле1 LIKE %pattern%' - индекс используется) NOT EXISTS подзапрос Чтобы принудительно отключить индекс, добавьте пустое выражение ||'' к текстовому полю (или +0 к числовому) в условии WHERE: SELECT * FROM КОНТР WHERE ИНН||''="2317777777" ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2016, 14:23 |
|
У меня получается что индексы не ускоряют выборку...а наоборот
|
|||
---|---|---|---|
#18+
Ух, ё, какая жирная, безапелляционная мурзила, хорошо, наверное, пионеров пугает! Предлагаю свою мурзилку, покороче, поскромней: если Вам не хватает мозгов, чтобы оценить эффективность индекса умозрительно - оцените её посредством тестов. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2016, 15:16 |
|
|
start [/forum/topic.php?fid=54&msg=39240442&tid=2008598]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
2ms |
others: | 270ms |
total: | 411ms |
0 / 0 |