Я делаю большую базу данных, которая, скажем так, содержит 3 таблицы:
A. Таблица «Сотрудники» с полями:
id = INTEGER ПЕРВИЧНЫЙ ИНДЕКС AUTOINCREMENT
Другие не имеют значения
B. Таблица "Job_Sites" с полями:
id = INTEGER ПЕРВИЧНЫЙ ИНДЕКС АВТОИНФРАКЦИИ
Другие не имеют значения
C. Таблица «Рабочие дни» с полями:
id = INTEGER ПЕРВИЧНЫЙ ИНДЕКС АВТОИНФРАКЦИИ
emp_id = является внешним ключом для сотрудников (id)
job_id = является внешним ключом для Job_Sites (id)
datew = INTEGER, который обозначает фактический рабочий день, представленный датой Unix в секундах с полуночи 1 января 1970 года
Наиболее распространенной операцией в этой базе данных является отображение рабочих дней для конкретного сотрудника. Я выполняю следующую команду выбора:
ВЫБРАТЬ * ОТ рабочих дней ГДЕ emp_id = 'Фактический идентификатор сотрудника' И job_id = 'Фактический идентификатор места работы' И датаw> = D1 И датаw
Мне нужно указать, что D1 и D2 рассчитываются для начала месяца в поиске и для следующего месяца, соответственно.
У меня на самом деле два вопроса:
Должен ли я устанавливать какие-либо поля в качестве индексов, кроме первичных индексов? (Извините, я, кажется, неправильно понял всю концепцию индексации)
Есть ли способ переписать оператор Select, чтобы, возможно, ускорить его. Например, большинство проверок в нем должны были бы видеть, что фактический идентификатор сотрудника и идентификатор сайта работы совпадают. Может быть, есть способ разделить его?
PS. Забыл сказать, я использую SQLite в приложении Windows C ++.