Ускорить выбор SQL в SQLite - PullRequest
       3

Ускорить выбор SQL в SQLite

1 голос
/ 18 апреля 2011

Я делаю большую базу данных, которая, скажем так, содержит 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 рассчитываются для начала месяца в поиске и для следующего месяца, соответственно.

У меня на самом деле два вопроса:

  1. Должен ли я устанавливать какие-либо поля в качестве индексов, кроме первичных индексов? (Извините, я, кажется, неправильно понял всю концепцию индексации)

  2. Есть ли способ переписать оператор Select, чтобы, возможно, ускорить его. Например, большинство проверок в нем должны были бы видеть, что фактический идентификатор сотрудника и идентификатор сайта работы совпадают. Может быть, есть способ разделить его?

PS. Забыл сказать, я использую SQLite в приложении Windows C ++.

1 Ответ

2 голосов
/ 20 апреля 2011

Если вы часто используете вышеупомянутый запрос, то вы можете повысить производительность, создав многоколоночный индекс, содержащий столбцы в запросе:

CREATE INDEX WorkdaysLookupIndex ON Workdays (emp_id, job_id, datew);

Иногда вам просто нужно создать индекс и попробовать свои запросы.чтобы увидеть что быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...