|
|
|
| Буду благодарен за любую подсказку. Вообщем у меня есть таблица. Создаю ёё так:
{
"[Id] COUNTER PRIMARY KEY",
"[SNumber] Text (12)",
"[IP] Text (15)",
"[Date_Time] Date",
"[Temperature] DOUBLE",
"[Period] INTEGER"
};
При загрузке моей проги, у меня выполняется один из трёх выриантов запросов. Вот они:
1. Здесь мне нужно выбрать последние 100 записей с таким то серийным номером...
SELECT TOP 100 DataTable.SNumber, DataTable.IP, DataTable.Date_Time, DataTable.Temperature FROM DataTable WHERE (((DataTable.SNumber)='000002B5C588')) ORDER BY DataTable.Date_Time DESC;
2. В этом запросе мне нужно загрузить значения за последние 15 мин. Первым делом я узнаю время последней записи:
SELECT DISTINCT TOP 1 DataTable.Date_Time FROM DataTable WHERE (((DataTable.SNumber)='000002B5C588')) ORDER BY DataTable.Date_Time DESC;
После чего делаю такой запрос:
SELECT DataTable.SNumber, DataTable.IP, DataTable.Date_Time, DataTable.Temperature FROM DataTable WHERE (((DataTable.SNumber)='000002B5C588') AND ((DataTable.Date_Time) Between #10/04/2011 10:07# And #10/04/2011 10:22#)) ORDER BY DataTable.Date_Time DESC;
3. И в этом варианте я делаю запросы по промежутку даты и времени. Вообщем вот:
SELECT DataTable.SNumber, DataTable.IP, DataTable.Date_Time, DataTable.Temperature FROM DataTable WHERE (((DataTable.SNumber)='000002B5C588') AND ((DataTable.Date_Time) Between #03/10/2011 13:26# And #03/10/2011 13:26#)) ORDER BY DataTable.Date_Time DESC;
Все они работаю, но есть одно но! Это время выполнения. Я с Access не особо знаком и буду рад любой информации для ускорения моих запросиков, начиная от каких полей нужно проиндексировать ну и вообще по поводу запросов... | |
|
| |
|
|
|
| ну в целом вроде нормально.
Индексы по SNumber и Date_Time очень желательны.
А таблица большая?
Вы делаете вложенными запросами или каждый отдельно сохранен? | |
|
| |
|
|
|
| Таблица может быть и 2 и 200 метров. Запросы выполняются при загрузке формы программы... А вот на счёт индексов, для них отдельные индексы или составные индексы тут нужны? | |
|
| |
|
|
|
| Время последней записи проще и быстрее получить запросом:
SELECT Max(Date_Time) FROM DataTable WHERE (((DataTable.SNumber)='000002B5C588'));
или функцией DMax.
Кстати, зачем у вас DISTINCT?
Если у вас "последние 15 мин", то вместо Between используйте только >= начальное время. Теоретически - быстрее (на один критерий отбора меньше). | |
|
| |
|
|
|
|
| Тут имеется последние 15 мин от последней записи) | |
|
| |