@revukvr

Должен ли одинаковый запрос выполнятся с разным временем?

Здравствуйте! Столкнулся с такой проблемой. Есть 2 базы которые расположены на одном сервере. Одна релизная, а вторая для тестов. В релизной БД хранятся данные за 10 дней и там есть N количество данных. В тестовой базе хранятся данные за 5 дней и там есть примерно N/2 количество данных. В тестовой БД абсолютно идентичные данные за последние 5 дней релизной БД.

В чём собственно вопрос. Я хочу выбрать данные за отдельный день (например за сегодня), но когда я делаю запрос к релизной БД, то данные возвращаются мне за 8 секунд, А когда делаю запрос на тестовую БД, то данные возвращаются за 5-6 секунд. Правильно ли это? Я думал что запрос должен отсечь все данные за предыдущие дни в одной и в другой БД и ответ должен приходить за одинаковое время примерно.

Пример запроса:

SELECT
  (SELECT concat(p.latitude::TEXT, ' ', p.longitude::TEXT)
   FROM positions p
   WHERE p.route_list_id = rl.id
   ORDER BY p.time DESC
   LIMIT 1) as POSITION,
  *
FROM route_list_date rld
       INNER JOIN route_list rl on rld.id = rl.route_list_date_id
WHERE rld.date = '2020-02-17'
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 3
Kwisatz
@Kwisatz
Больше web-приложений, хороших и разных
Конечно может, у вашей тестовой базы в кеше могут быть совершенно другие данные.
Кстати время какое то очень большое: либо у вас с индексами проблема либо с запросом, подозреваю что второе, глядя на селект.
Ответ написан
Mikhail_E
@Mikhail_E
1С, SQL
ИМХО:
1. Чтобы запрос корректно отсек лишние данные у вас должен быть Актуальный индекс по полю "date" в таблице "route_list_date".
2. Не помешал был актуальный индекс по полю "id" в таблицах "route_list_date" и по полю "route_list_date_id" в таблице "route_list" (чтобы внутреннее соединение прошло быстрее.)
Ответ написан
@IvanVakhrushev
Java Developer at Yandex
Время выполнения запроса может сильно варьироваться от нагрузки и состояния сервера.
Если у вас объём БД различается, то и время работы запроса будет различаться. Это нормально. Так и должно быть.
Здесь лучше всего смотреть на план исполнения запроса и его результирующую стоимость.
Добавьте к вашему запросу explain(analyze, buffers, verbose) и посмотрите на вывод БД.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы