Я использую 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.datesendjc desc составляет 166,770 мс

Я также пытаюсь сделать АНАЛИЗ студента

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

0
franco 15 Апр 2020 в 18:16

1 ответ

Лучший ответ

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

0
Bergi 15 Апр 2020 в 16:07