2016-03-01 3 views
0

Просмотр v_oneПочему заказ sql очень медленный?

Запрос 1: SELECT id FROM v_one LIMIT 2: 52 мс

Запрос 2: SELECT id FROM v_one ORDER BY id LIMIT 2: 2413 мс

Просмотр v_two

Запрос 3: SELECT id FROM v_two LIMIT 2: 260 мс

Запрос 4: SELECT id FROM v_two ORDER BY id LIMIT 2: 260 мс

Почему o n вид v_one, когда используется порядок, разница во времени до сих пор?

Любая помощь очень ценится

Приветствия

+0

Потому что он должен сортировать все данные. Вы можете ускорить ваши запросы, используя индекс, который, вероятно, второй. –

+0

@ Gordon Linoff, Это не сортировка всех данных. Я использую предел 2. Это означает только 2 данных. –

+1

Это не имеет значения, потому что исполнитель должен в любой момент отсканировать все данные для сортировки. –

ответ

2

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

  • Query1 оленья кожа у ORDER BY так просто взять первые два элемента
  • Query2 медленно, потому что ORDER BY нужно время, особенно если таблица больше и не показатель для id.
  • Query3 и Query4, даже если разные имеют одинаковое время, вероятно, потому, что этот вид имеет индекс или таблица небольшая.

Последняя можно использовать EXPLAIN ANALYZE для сравнения плана запроса между оба querys

EXPLAIN ANALYZE 
SELECT id FROM v_one LIMIT 2 
+0

Я использую View. В отличие от таблицы. Просмотр - это запросы, взятые из нескольких таблиц. Таким образом, он не может использовать индекс –

+0

Да, просмотреть индекс использования –

+0

Мой взгляд, используя 4 таблицы. У всех таблиц уже установлен индекс –

0

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

Надеюсь, это поможет.

Смежные вопросы