|
|
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Не особый спец в SQL, поэтому прошу помощи. Есть таблица состояний: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Записей в таблице примерно 3 миллиона. Требуется найти состояние некоего юнита на момент предшествующий заданному. Запрос Код: sql 1. 2. 3. 4. выполняется медленно (~350 мс) Вопрос - как можно ускорить? Firebird - 2.5.2.26539 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 05:52:21 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
При этом запрос на выборку состояний за интервал времени Код: sql 1. 2. 3. 4. выполняется практически мгновенно - ~ 15 мс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 06:08:36 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
А это ничего, что сортировка в разные стороны в двух примерах? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 07:20:07 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
Никогда не показывай планы запросов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 07:24:04 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
Да собственно, ничего, т.к. 1. есть еще индекс Код: sql 1. 2. План для первого (медленного) запроса Код: sql 1. План для второго (быстрого) запроса Код: sql 1. При этом, если изменить во втором запросе Код: sql 1. на Код: sql 1. , то планы становятся одинаковыми, а времена выполнения не изменяются ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 07:43:24 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
Пардон, одинаковыми такими: Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 07:45:23 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
_Оптимизатор_, Ты сказал не про все индексы. STATES_IDX3 - это кто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 10:11:54 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
_Оптимизатор_, Код: sql 1. 2. 3. 4. Вот этот запрос сколько выполняется? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 10:19:19 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
CyberMax_Оптимизатор_, Ты сказал не про все индексы. STATES_IDX3 - это кто? Не сразу, но про все. См. выше 15250407 : Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 10:24:31 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
Симонов Денис_Оптимизатор_, Код: sql 1. 2. 3. 4. Вот этот запрос сколько выполняется? Execute time = 344ms ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 10:29:40 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
_Оптимизатор_Требуется найти состояние некоего юнита на момент предшествующий заданному. Ваш запрос выполняет не совсем то. Ибо момент в моём понимании это это время (точнее дата-время). У вас же момент отсекается только по дате. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 10:37:58 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
Симонов Денис_Оптимизатор_Требуется найти состояние некоего юнита на момент предшествующий заданному. Ваш запрос выполняет не совсем то. Ибо момент в моём понимании это это время (точнее дата-время). У вас же момент отсекается только по дате. Ну да, формулировка несколько... Однако запрос выполняет то, что мне необходимо. :). Он возвращает последнее состояние юнита перед указанной датой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 10:45:04 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
_Оптимизатор_, в оптимизаторе 2.x есть косяк с навигацией по индексу (исправлено в трёшке, но та ещё в состоянии Альфа) Возможно один из запросов будет работать быстрее Код: sql 1. 2. 3. 4. или Код: sql 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 10:54:25 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
Симонов Денис_Оптимизатор_, в оптимизаторе 2.x есть косяк с навигацией по индексу (исправлено в трёшке, но та ещё в состоянии Альфа)Пичялька... Увы, на тройку в обозримом будущем перехода не будет. Симонов ДенисВозможно один из запросов будет работать быстрееПроверил: первый за 768 мс, второй за те же 344 мс. Впал в уныние. Решил проверить (с перепугу?) Код: sql 1. 2. 3. 4. ,и вот оно счастье: Execute time = 16ms Всем спасибо огромное. Симонов Денис, вам респект и уважуха! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 11:13:15 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
_Оптимизатор_, я бы не стал так радоваться. Возможно вам просто повезло, что для конкретного юнита мало данных. Со временем это может измениться и запрос стать не эффективным. Кстати статистика свежая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 11:18:41 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
Симонов Денис_Оптимизатор_, я бы не стал так радоваться. Возможно вам просто повезло, что для конкретного юнита мало данных. Со временем это может измениться и запрос стать не эффективным. Кстати статистика свежая? Эх... Данных не много, да. Select count выдал 19683. Но это за 3 года. хочется надеяться, что еще года 3 продержится, а там... или ишак или падишах. А статистика свежая, да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 11:29:36 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
_Оптимизатор_вот оно счастьеПлан "счастья" покажи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 11:39:48 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
hvlad, PLAN SORT ((S INDEX (STATES_IDX2))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 11:42:39 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
Вот такой индекс должен быть оптимальным: Код: sql 1. Если STATES_IDX1 создавался именно под этот запрос - попробуй его заменить на этот ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2013, 11:54:25 |
|
||
|
Оптимизировать (ускорить) запрос
|
|||
|---|---|---|---|
|
#18+
hvlad, Да, с таким индексом все работает быстро, если есть хотя бы одна запись, удовлетворяющая условию. Когда таких записей нет (примерно для 25-30% юнитов, статистика по которым ведется с 01 ноября), и если :DF меньше или равно 01.11.2013, время выстреливает до 500 мс, в то время как в варианте с +0 все замечательно. Само собой, с течением времени частота появления таких запросов будет стремиться к нулю, поэтому решил пока оставить вариант с +0, а ч-з некоторое время, если это начнет тормозить, плюсНоль отключу. Спасибо. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.12.2013, 04:50:52 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=38491214&tid=1564081]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
261ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
| others: | 213ms |
| total: | 546ms |

| 0 / 0 |
