Существует много причин, по которым измеренная производительность между двумя запросами может быть разной:
- Планы выполнения запросов (доминирующий фактор)
- Размер возвращаемых данных(возможно,
mrn
- это строка, которая действительно длинна для набора результатов в первом запросе, но не во втором) * - Другая активность базы данных, которая блокирует таблицы и индексы
- Другая активность сервера
- Кэши данных и индексов, которые предварительно загружены - либо в самой базе данных, либо в базовых компонентах ОС
Ваше наблюдение верно.Первый должен быть быстрее второго.Более важно, однако, наблюдение, что это просто не имеет смысла для вашего простого запроса:
Первый запрос выполняется за 0,760 секунды
select mrn
from EncounterInformation
limit 20;
Работа выполнена дляОбычно это делается для загрузки одной страницы данных (или, возможно, нескольких).Это будет стабильно занимать 0,760 секунды, если:
- У вас было очень медленное хранение данных (подумайте "почтовые голуби").
EncounterInformation
- это представление, а не таблица. - Вы не понимаете тайминги.
Если разница составляет 0,760 милли секунд и 0,509 миллисекунд, тогда разница действительно мала и, вероятно, из-за другихпроблемы - «горячие» кэши, другие действия на сервере, другие операции с базой данных.
Также возможно, что вы измеряете истекшее время, а не время базы данных, поэтому перегрузка сети потенциально может бытьпроблема.
Если вы запрашиваете просмотры, все ставки отключены, не зная, что это за представления.На самом деле, если вы заботитесь о производительности, вы должны включить в вопрос план выполнения.
Я не могу объяснить разницу.Что я могу сказать, так это то, что ваши наблюдения обоснованны, но в вашем вопросе недостаточно информации, что говорит о том, что вам нужно больше узнать о том, как понимать время.Я бы посоветовал вам начать с изучения explain
.