Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Количество записей и время выполнения запроса / 21 сообщений из 21, страница 1 из 1
22.06.2011, 10:04
    #37319403
vcn
vcn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
Здравствуйте!
Есть таблица
Код: plaintext
CREATE TABLE points (_id integer  primary key autoincrement, tracker_id integer , car_id integer , time integer , lat double , lon double , speed double , valid text , in1 integer, in2 integer, in3 integer, in4 integer, interval integer)
и запрос
Код: plaintext
select lat, lon, date(time, 'unixepoch') dt,  datetime(time, 'unixepoch'), speed, interval, time from points where tracker_id= 1  and car_id= 1  and valid='A' and time between strftime('%s','2003-04-25 02:42:26') and strftime('%s','2003-04-30 18:30:46') order by time ASC
На одну дату для пары значений tracker_id и car_id в таблице может быть максимально 80000 записей с небольшим.
Если в таблице 8 млн. записей запрос отрабатывает где-то 2 мин на одну дату, если 16 млн. уже 5 мин.

Есть ли возможность сократить время выборки? Можно ли минимизировать увеличение времени выборки с увеличением количества записей в таблице? Реально ли комфортно работать с 1000 млн. записей в таблице на простом ПК?
Спасибо за ответы!
...
Рейтинг: 0 / 0
22.06.2011, 14:27
    #37320058
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
vcn,

Создай индексы (можно использовать составной индекс) - по пол. time (или полям tracker_id,car_id,time).

Время выполнения указанного запроса должно быть малой долей секунды на таблице в сотни миллионов записей. См.
Тестирование SQLite 3.6.17-mobigroup.2 на больших таблицах
...
Рейтинг: 0 / 0
22.06.2011, 14:39
    #37320085
vcn
vcn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
MBGvcn,
Время выполнения указанного запроса должно быть малой долей секунды на таблице в сотни миллионов записей.
может дело в том, что там сервер мощный
Intel(R) Core(TM)2 Quad CPU Q6700 @ 2.66GHz
MemTotal: 8310900 kB
а я выполняю запрос на обычном ПК с 1ГБ оперативки и P4 3ГГц
пользуюсь библиотекой System.Data.SQLite?
...
Рейтинг: 0 / 0
22.06.2011, 16:06
    #37320321
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
vcn,

Без индексов всегда и везде тормозить будет. А для вашей маленькой БД и пентиум 1 хватило бы :)

Если сомневаетесь в библиотеке - тестируйте запросы в SQLite шелле.
...
Рейтинг: 0 / 0
22.06.2011, 16:08
    #37320326
vcn
vcn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
проиндексировал
Код: plaintext
1.
CREATE INDEX "xxx" ON "points" ("tracker_id" ASC, "car_id" ASC, "time" ASC)
запрос
Код: plaintext
1.
select date(max(time), 'unixepoch') from points
к таблице с 16 млн. записей выполняется около 16 сек.
это нормально? подскажите, что я делаю не так
...
Рейтинг: 0 / 0
22.06.2011, 16:19
    #37320356
vcn
vcn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
в sqliteshell аналогичный результат, не быстрее
...
Рейтинг: 0 / 0
22.06.2011, 19:05
    #37320671
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
vcn,

1. Сделать "vacuum;analyze;"
2. Показать результат "explain query plan ..."
...
Рейтинг: 0 / 0
22.06.2011, 20:08
    #37320743
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
MBG,

Еще замерить время выполнения для
select count(*) ...

Т.к. 16 секунд больше похоже на время выборки+время передачи данных клиенту.
...
Рейтинг: 0 / 0
23.06.2011, 00:40
    #37320972
vcn
vcn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
MBGvcn,

1. Сделать "vacuum;analyze;"
2. Показать результат "explain query plan ..."
1. сделал
2.
Код: plaintext
explain query plan select date(max(time),'unixepoch') from points;
0|0|0|SCAN TABLE points (~1000000 rows)

MBGЕще замерить время выполнения для
select count(*) ...
в пределах секунды
MBGТ.к. 16 секунд больше похоже на время выборки+время передачи данных клиенту.
база на локальном диске, обращений по сети нет
...
Рейтинг: 0 / 0
23.06.2011, 00:49
    #37320978
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
vcnпроиндексировал
Код: plaintext
1.
CREATE INDEX "xxx" ON "points" ("tracker_id" ASC, "car_id" ASC, "time" ASC)
запрос
Код: plaintext
1.
select date(max(time), 'unixepoch') from points
к таблице с 16 млн. записей выполняется около 16 сек.
это нормально? подскажите, что я делаю не такЭтот индекс, на этот запрос - не играет.

Сделай:
Код: plaintext
1.
CREATE INDEX "xxx1" ON "points" ("time" ASC)
...
Рейтинг: 0 / 0
23.06.2011, 00:57
    #37320981
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
vcn2.
Код: plaintext
explain query plan select date(max(time),'unixepoch') from points;
0|0|0|SCAN TABLE points (~1000000 rows)


Этот запрос перебирает все записи таблицы! К выборке из первого поста вообще отношения не имеет - где все условия потерялись?..

vcnMBGТ.к. 16 секунд больше похоже на время выборки+время передачи данных клиенту.
база на локальном диске, обращений по сети нет

Запрос вида "select * ..." требует найти данные на диске, прочитать и передать в обработчик программы (или вывести на экран). Время на первое действие и имеет смысл рассматривать как скорость работы SQLite на данном оборудовании (хорошо, если индексы помещаются в ОЗУ, иначе еще и скорость диска сыграет). Второе определяется в большей степени скоростью диска, третье - способом обработки данных (например, вывод на экран в консоли отнюдь не быстрая операция). Соответственно, надо понимать, что именно измеряется. На главной фишке реляционных СУБД - малых выборках (мало записей небольшого размера) - полное время мало отличается от времени первой операции, а при выборке всех записей (нафига, кстати? любая СУБД для такой операции малопригодна) первое время оказывается малой частью общего.
...
Рейтинг: 0 / 0
23.06.2011, 01:22
    #37320987
vcn
vcn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
White Owl,
сделал,
стало нааааамного медленнее, я добавил индекс, как ты написал, предыдущий не удалял
можно делать разные индексы, под разные запросы?

MBG, мне запрос по граничным датам тоже важен, время измеряю до вывода, т.е. если в коде на Си(и на нем протестировал) перед sqlite3_prepare и после sqlite3_step засекаю

т.е. получается в железе таки дело?

запрос в первом посте ускорил раз в десять убрав функцию из условия, предварительно расcчитав границы в time_t, но тоже не доли секунды
...
Рейтинг: 0 / 0
23.06.2011, 01:42
    #37320993
vcn
vcn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
автора при выборке всех записей (нафига, кстати? любая СУБД для такой операции малопригодна)
мне весь миллиард не нужен, а вот тысяч 300 неплохо бы получать быстро, нужно, чтобы рисовать на карте, пользователь не хочет по дням смотреть, хочет, например, сразу месяц
хотя я думаю, что это неудобно

если не трудно, подскажите про индексы, на одну таблицу сколько можно создавать? как они влияют друг на друга? БД сама подбирает подходящий?
Спасибо!
...
Рейтинг: 0 / 0
23.06.2011, 01:56
    #37320996
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
vcn,
300 000 записей * 300 байт запись = 100 мегабайт данных. О какой скорости может идти речь?.. и смысла в том нет, хотите трэк показать за месяц - генерализуйте его, останется скажем тысяча точек и все будет удобно и быстро. одна из простейших задач в картографии,вообще-то.

Индексы субд сама выбирает,их можно несколько создать,но каждый индекс замедляет вставку и обновление данных.
...
Рейтинг: 0 / 0
23.06.2011, 02:02
    #37320999
vcn
vcn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
авторгенерализуйте его не совсем понял, я и выбираю все точки, чтобы вывести только нужные, а по ходу добыть дополнительную аналитику, типа остановок, их времени, пробега между остановками, потери позиции и т.п.

за индексы спасибо! шелл вроде тормозить стал с добавлением еще одного, а программа вроде живее заворочалась
...
Рейтинг: 0 / 0
23.06.2011, 12:19
    #37321542
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
vcn,
При вставке данные надо предобрабатывать или ночью например можно это выполнять. на каждый запрос просмотра такую тяжелую операцию делать смысла нет.
...
Рейтинг: 0 / 0
23.06.2011, 12:26
    #37321564
vcn
vcn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
MBG ,
White Owl ,
Спасибо за помощь!
Подумаю над предварительной обработкой данных, может действительно отдельные таблицы сделать, в которые аналитику вставлять при импорте данных и запросы строить к ним, а для деталей к большой таблице, но уже с более четкими условиями выборки
...
Рейтинг: 0 / 0
23.06.2011, 13:28
    #37321726
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
vcn,

Кстати, а где границы видимой области в запросе? Нет смысла извлекать из БД данные, которые все равно не будут видимы.
...
Рейтинг: 0 / 0
23.06.2011, 13:52
    #37321802
vcn
vcn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
MBG,
все что извлекаю видно на карте, я ее масштабирую по границам выбранных данных
но замечание ценное , может стоит пересмотреть идеологию и подгружать данные по мере необходимости
...
Рейтинг: 0 / 0
23.06.2011, 14:31
    #37321934
MBG
MBG
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
vcn,

Возможно, помогут некоторые мои заметки по теме ГИС:
http://geomapx.blogspot.com/search/label/GIS

И по ГИС-системе на основе SQLite:
http://geomapx.blogspot.com/search/label/Spatialite
...
Рейтинг: 0 / 0
23.06.2011, 14:37
    #37321949
vcn
vcn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Количество записей и время выполнения запроса
MBG,

спасибо! обязательно почитаю
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Количество записей и время выполнения запроса / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]