Query with multiple table joins is taking too much time. How to do the indexing for the query below:
QUERY:
select ri.id, LOWER(REPLACE(ri.name,' ','-')) as urlName,ri.name,
ri.logo,
group_concat(distinct rc.cuisine order by rc.cuisine asc SEPARATOR ',
'
) as 'cuisine_string', rc.cuisine, rai.rating, rai.min_order_amount,
rai.latitude, rai.longitude, rai.delivery_time, rdf.start_dist,
rdf.end_dist, rdf.fee, ri.address_search, rai.delivery_facility,
ri.status as 'restaurant_status', rt.day, rt.status 'opening_status',
rt.opening_time, rt.closing_time,
' - ',rdf.end_dist,
' km',' : ','₹',fee) SEPARATOR '~') as 'delivery_fee_string',
GROUP_CONCAT(distinct CONCAT(rdf.start_dist, ( SELECT MATCH (ri.address_search) AGAINST ('Kahilipara,
Guwahati, Assam, India') as relevance
from restaurant_info ri
where ri.id = rai.restaurant_id
and ri.id = rt.restaurant_id
and ri.id = rdf.restaurant_id
and ri.id = rc.restaurant_id) as ord , ( 3959 * acos ( cos ( radians(26.1428694) ) * cos( radians( rai.latitude ) ) * cos( radians( rai.longitude ) - radians(91.768487) ) + sin ( radians(26.1428694) ) * sin( radians( rai.latitude ) ) ) ) AS distance
from restaurant_info ri
inner join restaurant_additional_info rai ON ri.id = rai.restaurant_id
inner join restaurant_timing rt ON ri.id = rt.restaurant_id
inner join restaurant_delivery_fee rdf ON ri.id = rdf.restaurant_id
inner join restaurant_cuisine rc ON ri.id = rc.restaurant_id
where ri.status = 1
and rt.status = 1
and rt.day = lower(DATE_FORMAT(NOW(),'%a'))
and rai.delivery_facility != 1
and rai.min_order_amount <= 100
and rai.rating <= ''
and MATCH (ri.address_search) AGAINST ('Kahilipara, Guwahati,
Assam, India'
)
and rt.opening_time < '12:40:21'
and rt.closing_time > '12:40:21'
group by ri.id
having rdf.start_dist = 0
and distance < 3.10686
order by distance asc
LIMIT 100 OFFSET 0
DESCRIPTION OF PROBLEM- This Query is taking 8.5 seconds to run. My application contains 1-2 such queries.Therefore loading time approaches 1 min on server.
Can anyone help me to apply indexing on this query?