powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как можно оптимизировать запрос выборки по двум датам из БД Sqlite?
3 сообщений из 3, страница 1 из 1
Как можно оптимизировать запрос выборки по двум датам из БД Sqlite?
    #39743978
AntonSol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Составил запрос по выборки максимальных значений из двух полей с датами, используя несколько связанных таблиц:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT mes.measureCommFromTab, p.XMLizmerenije, p.XMLdatetime, p.measureComm_id 
FROM `xmlmessagetab` p 
INNER JOIN `indexobjectstab` ps 
ON ps.keyID = p.indexObjectsTab_id 
INNER JOIN `measurecommtab` mes 
ON mes.keyID = p.measureComm_id 
WHERE ps.indexObject = '55285' 
AND p.XMLdatetime = (SELECT max(p.XMLdatetime) 
FROM `xmlmessagetab` p 
INNER JOIN `indexobjectstab` ps 
ON ps.keyID = p.indexObjectsTab_id 
WHERE ps.indexObject = '55285' ) 
AND p.datetimeMess = (SELECT max(p.datetimeMess) FROM `xmlmessagetab` p INNER JOIN `indexobjectstab` ps ON ps.keyID = p.indexObjectsTab_id WHERE ps.indexObject = '55285' )



Запрос выполняется две с половиной минуты, что не выносимо долго:(
1. Подскажите пожалуйста, может быть есть способ оптимизировать данный запрос?
2. Есть план "Б", при записи данных в БД, дублировать последнюю дату поля "XMLdatetime" и потом использовать её для составления запроса на выборку по последней дате, что скажете об этом варианте?
...
Рейтинг: 0 / 0
Как можно оптимизировать запрос выборки по двум датам из БД Sqlite?
    #39743981
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прежде чем сюда постить неплохо бы сначала отформатировать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT mes.measureCommFromTab, p.XMLizmerenije, p.XMLdatetime, p.measureComm_id 
   FROM `xmlmessagetab` p 
            INNER JOIN `indexobjectstab` ps ON ps.keyID = p.indexObjectsTab_id 
            INNER JOIN `measurecommtab` mes ON mes.keyID = p.measureComm_id 
   WHERE ps.indexObject = '55285' 
           AND p.XMLdatetime = (SELECT max(p.XMLdatetime) 
                       FROM `xmlmessagetab` p 
                              INNER JOIN `indexobjectstab` ps ON ps.keyID = p.indexObjectsTab_id 
                       WHERE ps.indexObject = '55285' 
              ) 
          AND p.datetimeMess = (SELECT max(p.datetimeMess) 
                                   FROM `xmlmessagetab` p INNER JOIN `indexobjectstab` ps ON ps.keyID = p.indexObjectsTab_id 
                                   WHERE ps.indexObject = '55285' 
                                  )


Надо индексы:
1. indexobjectstab.indexObject
2. xmlmessagetab.indexObjectsTab_id
3. measurecommtab.keyID

ИМХО подзапросы можно отдельно выполнить, а результат в основной запрос подставлять.
...
Рейтинг: 0 / 0
Как можно оптимизировать запрос выборки по двум датам из БД Sqlite?
    #39743989
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если подзапросы считать отдельно, то можно их объединить
Код: sql
1.
2.
3.
4.
SELECT max(p.XMLdatetime), max(p.datetimeMess) 
                       FROM `xmlmessagetab` p 
                              INNER JOIN `indexobjectstab` ps ON ps.keyID = p.indexObjectsTab_id 
                       WHERE ps.indexObject = '55285' 
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Как можно оптимизировать запрос выборки по двум датам из БД Sqlite?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]