Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как ускориться с выполнение запросов в моем случае?? MS Access 2003 11.81
 
 автор: Артём   (04.10.2011 в 11:33)   личное сообщение
 
 

Буду благодарен за любую подсказку. Вообщем у меня есть таблица. Создаю ёё так:

{
"[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 не особо знаком и буду рад любой информации для ускорения моих запросиков, начиная от каких полей нужно проиндексировать ну и вообще по поводу запросов...

  Ответить  
 
 автор: osmor   (05.10.2011 в 10:58)   личное сообщение
 
 

ну в целом вроде нормально.
Индексы по SNumber и Date_Time очень желательны.
А таблица большая?
Вы делаете вложенными запросами или каждый отдельно сохранен?

  Ответить  
 
 автор: Артём   (05.10.2011 в 15:06)   личное сообщение
 
 

Таблица может быть и 2 и 200 метров. Запросы выполняются при загрузке формы программы... А вот на счёт индексов, для них отдельные индексы или составные индексы тут нужны?

  Ответить  
 
 автор: Анатолий (Киев)   (05.10.2011 в 11:17)   личное сообщение
 
 

Время последней записи проще и быстрее получить запросом:
SELECT Max(Date_Time) FROM DataTable WHERE (((DataTable.SNumber)='000002B5C588'));
или функцией DMax.
Кстати, зачем у вас DISTINCT?

Если у вас "последние 15 мин", то вместо Between используйте только >= начальное время. Теоретически - быстрее (на один критерий отбора меньше).

  Ответить  
 
 автор: Артём   (05.10.2011 в 15:07)   личное сообщение
 
 

Спасибо, помогло!

  Ответить  
 
 автор: Артём   (05.10.2011 в 15:11)   личное сообщение
 
 

Тут имеется последние 15 мин от последней записи)

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList