Используем 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.