Tuesday, June 9, 2015

Сравнение двух способов получения объекта.

Используем ORMLite
Возникло желание сравнить скорость получения объекта по
1) generated id
2) по произвольному полю

Что быстрее, имеет ли смысл передавать ссылку на объект в базе данных в виде индекса в БД.

Делаю 1000 повторений одного запроса.

Далее пример и результаты
1)
A. Запрос первого объекта в БД, т.н. index=1;
Start 15:06:43.710
Stop 15:06:47.716
4.006 sec.
B. Запрос того же объекта по полю int id.
Start 15:06:47.717
Stop 15:06:51.694
3.977
Почти одинаковое время выполнения запроса - 4 сек.

2) Запрос десятого объекта в БД.
A. Запрос по db index;
Start 15:23:35.322
Stop 15:23:40.250
4.928
B. Запрос того же объекта по полю int id.
Start 15:23:40.250
Stop 15:23:45.379
5.129
Выбор по БД index прошел чуть быстрее

3) Запрос двадцатого объекта в БД.
A. Запрос по db index;
Start 15:30:09.632
Stop 15:30:13.740
4.108
B. Запрос того же объекта по полю int id.
Start 15:30:13.740
Stop 15:30:17.746
4.006
Почти одинаковое время выполнения запроса - 4 сек.

4) Запрос тридцатого объекта в БД.
A. Запрос по db index;
Start 15:34:14.441
Stop 15:34:19.567
5,126
B. Запрос того же объекта по полю int id.
Start 15:34:19.567
Stop 15:34:24.559
4.992
Почти одинаковое время выполнения запроса - 5 сек.

ОК, усложним выбор объекта - будем выполнять по полю String.

5) Запрос тридцатого объекта в БД.
A. Запрос по db index;
Start 15:40:04.385
Stop 15:40:09.246
4,861
B. Запрос того же объекта по полю String .
Start 15:40:09.246
Stop 15:40:14.072
4.826

Картина не поменялась.
Можно предположить, что ORMLite извлекает объект используя тот-же механизм.

Вывод: использование индекса объекта в локальной базе данных не дает преимущества по сравнению с использованием "родных" объекту полей.

ORMLITE: использована библиотека версии 4.42.

No comments:

Post a Comment