|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
Есть таблица в которую записываются данные о расположении абонента: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
Подскажите, можно ли составить запрос так, чтобы мне возвращались последние данные от каждого абонента? Если просто сделать такой запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8.
то я получаю, для каждого абонента, когда последний раз эти данные были. Только ID и время. А мне нужно получить еще и координаты какие были на тот момент. Сейчас сделал через процедуру: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
Только мне кажется это изврат какой-то ну и долго считается. Можно это сделать одним запросом, как думаете? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 13:18 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 13:33 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
AndreyShimну и долго считается а индексы нужные есть? и зачем это (gd.TimeSession = :TimeSession) AND (gd.AbonentId = :AbonentId) когд у тебя первичный ключ ID есть? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 13:35 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
А вообще смотря по соотношению как часто ты пишешь и как часто считаешь. Можно и столбец завести, с признаком последнести данной строчки, или отдельную таблицу AbonentID -> ID (gsmdata pk) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 13:37 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
Arioch Код: sql 1. 2. 3. 4. 5.
Так не получается. Не выполняется даже отдельно внутренний запрос: Код: sql 1.
Ошибка: Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 13:40 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
AriochА вообще смотря по соотношению как часто ты пишешь и как часто считаешь. Можно и столбец завести, с признаком последнести данной строчки, или отдельную таблицу AbonentID -> ID (gsmdata pk) Сейчас есть отдельная таблица ActualInfo, в которую я пишу последние данные. На AfterInsert таблицы GsmData я или добавляю, или обновляю в ней данные. Но так, как в GsmData данные сыпятся штук по 100 в секунду, растет количество версий записей в ActualInfo. И через какое-то время вся база начинает тормозить. Для сборки мусора приходится по таймеру раз в какое-то время делать Код: sql 1.
Так, в принципе, все работает. Только мне кажется есть более простые пути без доп таблиц и дублирования данных. Вот ищу. 6-) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 13:48 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
AndreyShim, насколько понимаю нужны оконные функции (в тройке они есть) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 15:10 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 16:21 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
Naf, Вот это то, что нужно. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 17:03 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
m7mAndreyShim, насколько понимаю нужны оконные функции (в тройке они есть) Ну на 3-ку пока не хочется переходить. Но про них я почитаю... Пасиб! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 17:04 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
AndreyShim, ктати, можно ли считать, что ID мнонотонно возрастает ? тогда Код: sql 1. 2. 3. 4.
просто потому что на PK уже есть индекс Интересно, сможет ли FB2 для внутреннего запроса использовать индекс descending(AbonentID, ID) ...соотв для предыдущего запроса - descending(AbonentID, TimeSession) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 17:33 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
Ariochктати, можно ли считать, что ID мнонотонно возрастает ? тогда Код: sql 1. 2. 3. 4.
Да, вы правы, так и есть. Действительно, ко времени можно и не привязываться. AriochИнтересно, сможет ли FB2 для внутреннего запроса использовать индекс descending(AbonentID, ID) ...соотв для предыдущего запроса - descending(AbonentID, TimeSession) Про это не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 18:04 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
AndreyShim, так проверьте ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 19:19 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
AndreyShim, тип float используется осмысленно, или по незнанию? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.11.2015, 20:26 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
AriochAndreyShim, так проверьте Что-то я не очень понял, что вы имеете в виду. :/ ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 13:41 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
kdvAndreyShim, тип float используется осмысленно, или по незнанию? Вы имеете ввиду, что float 32 бита? Или что-то еще? Для хранения координат это от -180 до 180 - 5 знаков после запятой вроде хватает. Изменения в 5-м знаке это меньше метра. У нас координаты не такие точные приходят, чтобы их хранить в двойной точности. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 13:52 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
AndreyShimИзменения в 5-м знаке это меньше метра. У нас координаты не такие точные приходят, чтобы их хранить в двойной точности. Используйте NUMERIC(8,5) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 14:12 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
AndreyShimВы имеете ввиду, что float 32 бита? я имею в виду, что float это вещественное число с крайне низкой точностью, которое сейчас мало для чего годится. И в нем, кстати, некоторые числа (дробные) даже и не могут храниться, они тут же искажаются. Например, 1.88 сразу превращается в 1.87999999523163. http://www.ibase.ru/devinfo/round.htm ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 14:58 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
Naf Используйте NUMERIC(8,5) kdvя имею в виду, что float это вещественное число с крайне низкой точностью, которое сейчас мало для чего годится. И в нем, кстати, некоторые числа (дробные) даже и не могут храниться, они тут же искажаются. Например, 1.88 сразу превращается в 1.87999999523163. http://www.ibase.ru/devinfo/round.htm Понял. Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 15:23 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
kdvя имею в виду, что float это вещественное число с крайне низкой точностью, которое сейчас мало для чего годитсяТрёхмерная графика - не так уж мало ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 16:47 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, Звучит как "приборы - 120" В какой части трёхмерной графики всё завязано на float? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 17:30 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
Объекты трёхмерной графики разбиваются на полигоны (треугольники). Координаты полигонов задают вещественными числами. Как правило - именно float. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.11.2015, 18:37 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, а при чем тут полигоны? У автора таблица называется GSMDATA, т.е. речь идет про GSM, и координаты устройства (названия столбцов тоже намекают). Для координат рекомендуют вещественное с точностью 10 цифр и 6 после точки. Т.е. numeric(10,6). Float имеет точность в 7 цифр, так что в 10 цифр он уже не попадает. Double precision - 15 цифр. Так что лучше использовать numeric(10,6), который будет храниться в bigint. Понятно, конечно, что и float покатит. Но для определенных координат он будет вносить свою погрешность. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 02:52 |
|
Помогите в оптимизации запроса.
|
|||
---|---|---|---|
#18+
Basil A. Sidorov, Пиши сразу, что в D3DX. А так, в общем - неправда. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.11.2015, 09:20 |
|
|
start [/forum/topic.php?fid=40&msg=39105094&tid=1562508]: |
0ms |
get settings: |
9ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
32ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 149ms |
0 / 0 |