Удивительная временная статистика для SQL-запросов - PullRequest
0 голосов
/ 23 мая 2019

У меня есть два запроса, параметры синхронизации которых я хочу проанализировать.

Первый запрос занимает намного больше времени, чем второй, хотя, по моему мнению, он должен быть наоборот. Есть объяснения?

Первый запрос:

select mrn
from EncounterInformation
limit 20;

Второй запрос:

select enc.mrn, fl.fileallocationid
from EncounterInformation as enc inner join 
     FileAllocation as fl
     on enc.encounterIndexId = fl.encounterid
limit 20;

Первый запрос выполняется на MYSQL за 0,760 секунды, а второй - на удивление 0,509 секунды.

1 Ответ

1 голос
/ 23 мая 2019

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

  • Планы выполнения запросов (доминирующий фактор)
  • Размер возвращаемых данных(возможно, mrn - это строка, которая действительно длинна для набора результатов в первом запросе, но не во втором) *
  • Другая активность базы данных, которая блокирует таблицы и индексы
  • Другая активность сервера
  • Кэши данных и индексов, которые предварительно загружены - либо в самой базе данных, либо в базовых компонентах ОС

Ваше наблюдение верно.Первый должен быть быстрее второго.Более важно, однако, наблюдение, что это просто не имеет смысла для вашего простого запроса:

Первый запрос выполняется за 0,760 секунды

select mrn
from EncounterInformation
limit 20;

Работа выполнена дляОбычно это делается для загрузки одной страницы данных (или, возможно, нескольких).Это будет стабильно занимать 0,760 секунды, если:

  • У вас было очень медленное хранение данных (подумайте "почтовые голуби").
  • EncounterInformation - это представление, а не таблица.
  • Вы не понимаете тайминги.

Если разница составляет 0,760 милли секунд и 0,509 миллисекунд, тогда разница действительно мала и, вероятно, из-за другихпроблемы - «горячие» кэши, другие действия на сервере, другие операции с базой данных.

Также возможно, что вы измеряете истекшее время, а не время базы данных, поэтому перегрузка сети потенциально может бытьпроблема.

Если вы запрашиваете просмотры, все ставки отключены, не зная, что это за представления.На самом деле, если вы заботитесь о производительности, вы должны включить в вопрос план выполнения.

Я не могу объяснить разницу.Что я могу сказать, так это то, что ваши наблюдения обоснованны, но в вашем вопросе недостаточно информации, что говорит о том, что вам нужно больше узнать о том, как понимать время.Я бы посоветовал вам начать с изучения explain.

...