как оптимизировать запрос mysql с внутренним соединением

select id from customer_details where store_client_id = 2 
And
    id  NOT IN (select customer_detail_id from  orders 
        where store_client_id = 2 and total_spent > 100 GROUP BY customer_detail_id ) 
Or
    id IN (select tcd.id from property_details as pd, customer_details as tcd 
        where pd.store_client_id = 2 and pd.customer_detail_id = tcd.customer_id and pd.property_key = 'Accepts Marketing' 
        and pd.property_value = 'no') 
And 
    id IN (select customer_detail_id from orders 
        where store_client_id = 2 GROUP BY customer_detail_id HAVING count(customer_detail_id) > 0 ) 
Or
    id IN (select tor.customer_detail_id from ordered_products as top, orders as tor 
        where tor.id = top.order_id and tor.store_client_id = 2 
        GROUP BY tor.customer_detail_id having sum(top.price) = 1)`

У меня есть этот запрос mysql с внутренним соединением, поэтому, когда он запускается на сервере mysql, он замедляется, в чем проблема, не могу найти.
Но через 4-5 минут он возвращает 15 000 записей. Эти записи могут быть не проблемой.
В некоторых учебниках предлагается использовать внутреннее соединение, левое соединение,... Но я не знаю, как преобразовать этот запрос в предложение соединения. Любая помощь будет оценена. Заранее спасибо.


person user3146706    schedule 24.01.2017    source источник


Ответы (1)


Прежде всего, пожалуйста, прочтите реляционную модель и оптимизация операторов select.

person Tim S.    schedule 24.01.2017