I ran explain analyse on mysql query:
-> Limit: 2000 row(s) (cost=2530 rows=1) (actual time=1355..1355 rows=1 loops=1) -> Aggregate: avg(r.nps_score) (cost=2530 rows=1) (actual time=1355..1355 rows=1 loops=1) -> Nested loop left join (cost=2434 rows=952) (actual time=11.4..1351 rows=23355 loops=1) -> Nested loop left join (cost=2315 rows=239) (actual time=9.32..1235 rows=23355 loops=1) -> Nested loop left join (cost=2285 rows=239) (actual time=9.31..1192 rows=23355 loops=1) -> Nested loop left join (cost=2256 rows=239) (actual time=9.3..1161 rows=23355 loops=1) -> Filter: (s.discarded_at is null) (cost=2226 rows=239) (actual time=9.28..1107 rows=23355 loops=1) -> Nested loop left join (cost=2226 rows=239) (actual time=9.28..1104 rows=23377 loops=1) -> Nested loop left join (cost=1802 rows=239) (actual time=7.74..1048 rows=23377 loops=1) -> Nested loop inner join (cost=1545 rows=239) (actual time=7.23..985 rows=23377 loops=1) -> Nested loop inner join (cost=1106 rows=477) (actual time=6.65..807 rows=23377 loops=1) -> Nested loop inner join (cost=64.2 rows=18) (actual time=0.247..2.14 rows=245 loops=1) -> Covering index lookup on d using index_drivers_on_key (key='manager_support') (cost=1.1 rows=1) (actual time=0.0216..0.0269 rows=1 loops=1) -> Filter: (q.question_type = 'nps') (cost=46.9 rows=18) (actual time=0.225..2.09 rows=245 loops=1) -> Index lookup on q using index_questions_on_driver_id (driver_id=d.id) (cost=46.9 rows=180) (actual time=0.222..1.87 rows=362 loops=1) -> Filter: ((r.nps_score is not null) and (r.discarded_at is null) and (r.employee_chat_id is not null)) (cost=52.1 rows=26.5) (actual time=0.782..3.28 rows=95.4 loops=245) -> Index lookup on r using index_responses_on_question_id (question_id=q.id) (cost=52.1 rows=58.8) (actual time=0.782..3.26 rows=95.6 loops=245) -> Filter: (ec.discarded_at is null) (cost=0.822 rows=0.5) (actual time=0.00732..0.00742 rows=1 loops=23377) -> Single-row index lookup on ec using PRIMARY (id=r.employee_chat_id) (cost=0.822 rows=1) (actual time=0.00715..0.00719 rows=1 loops=23377) -> Filter: (r.option_id = op.id) (cost=0.977 rows=1) (actual time=0.0024..0.00251 rows=0.999 loops=23377) -> Single-row covering index lookup on op using PRIMARY (id=r.option_id) (cost=0.977 rows=1) (actual time=0.00221..0.00225 rows=0.999 loops=23377) -> Single-row index lookup on s using PRIMARY (id=ec.schedule_id) (cost=0.775 rows=1) (actual time=0.00217..0.0022 rows=1 loops=23377) -> Single-row index lookup on e using PRIMARY (id=ec.employee_id) (cost=0.254 rows=1) (actual time=0.00211..0.00214 rows=1 loops=23355) -> Single-row covering index lookup on dp using PRIMARY (id=e.department_id) (cost=0.254 rows=1) (actual time=0.0011..0.00113 rows=0.977 loops=23355) -> Single-row covering index lookup on m using PRIMARY (id=e.manager_id) (cost=0.254 rows=1) (actual time=0.00161..0.00164 rows=0.968 loops=23355) -> Filter: <in_optimizer>(p1.id,<exists>(select #4)) (cost=1.02 rows=3.99) (actual time=0.00472..0.00477 rows=0.0603 loops=23355) -> Covering index lookup on p1 using index_performance_ratings_on_employee_id (employee_id=e.id) (cost=1.02 rows=3.99) (actual time=0.00167..0.00179 rows=0.384 loops=23355) -> Select #4 (subquery in condition; dependent) -> Limit: 1 row(s) (cost=1.8 rows=1) (actual time=0.00674..0.00675 rows=0.157 loops=8975) -> Filter: (<cache>(p1.id) = <ref_null_helper>(max(p2.id))) (cost=1.8 rows=2) (actual time=0.00661..0.00661 rows=0.157 loops=8975) -> Group aggregate: max(p2.id) (cost=1.8 rows=2) (actual time=0.00635..0.00638 rows=1 loops=8975) -> Covering index lookup on p2 using index_performance_ratings_on_employee_id (employee_id=p1.employee_id) (cost=1.41 rows=3.99) (actual time=0.00291..0.00518 rows=7.87 loops=8975)

My query:
SELECT avg(nps_score) as benchmark FROM engagement_analysis WHERE engagement_analysis.driverKey = 'manager_support' AND engagement_analysis.question_type = 'nps' AND engagement_analysis.nps_score IS NOT NULL
can you help me understand the results here?