Медленный запрос с предложениями ORDER и LIMIT - PullRequest
0 голосов
/ 15 апреля 2020

Я использую PostgreSQL 11

У меня около 3 миллионов строк в базе данных

время выполнения этого запроса составляет 2 секунды

    EXPLAIN ANALYZE  SELECT Student.ID AS id,
     Student.name AS name,  Student.age AS age,dept.name,college.name
     FROM Student as Student 
     LEFT OUTER JOIN department dept 
     on dept.id=Student.dept_id 
     LEFT OUTER JOIN college college 
     on college.id=dept.college_id  
      WHERE  Student.usertran_id = 'EM-001' 

     ORDER BY Student.datesendjc desc

 LIMIT 10 OFFSET 0

результат:

 "Limit  (cost=332499.36..332500.52 rows=10 width=30) (actual time=1707.668..1713.719 rows=10 loops=1)"
"  ->  Gather Merge  (cost=332499.36..332574.50 rows=644 width=30) (actual time=1707.663..1713.684 rows=10 loops=1)"
"        Workers Planned: 2"
"        Workers Launched: 2"
"        ->  Sort  (cost=331499.33..331500.14 rows=322 width=30) (actual time=1677.797..1677.806 rows=6 loops=3)"
"              Sort Key: student.datesendjc DESC"
"              Sort Method: quicksort  Memory: 25kB"
"              Worker 0:  Sort Method: quicksort  Memory: 25kB"
"              Worker 1:  Sort Method: quicksort  Memory: 25kB"
"              ->  Parallel Seq Scan on student  (cost=0.00..331492.38 rows=322 width=30) (actual time=298.782..1677.567 rows=10 loops=3)"
"                    Filter: ((usertran_id)::text = 'EM-001'::text)"
"                    Rows Removed by Filter: 1494350"
"Planning Time: 3.414 ms"
"Execution Time: 1713.871 ms"

продолжительность выполнения без ORDER BY Student.datesendj c des c составляет 166,770 мс

Я пытаюсь также сделать ANALYZE Student

Я хочу, чтобы время выполнения было равно или почти равнялось запросу без ORDER BY Student.datesendj c des c

1 Ответ

0 голосов
/ 15 апреля 2020

Для запроса, который фильтрует с WHERE Student.usertran_id = и имеет предложение ORDER BY Student.datesendjc desc, вам нужно будет создать индекс для Student(usertran_id, datesendjc).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...