За последние 24 часа нас посетил 20201 программист и 1702 робота. Сейчас ищут 1307 программистов ...

Как оптимизировать 2 запроса ?

Тема в разделе "PHP и базы данных", создана пользователем tatami, 23 июн 2018.

  1. tatami

    tatami Новичок

    С нами с:
    23 июн 2018
    Сообщения:
    1
    Симпатии:
    0
    Здравствуйте, помогите оптимизировать 2 запроса. Сервер не то что надрывается, но изрядно тормозит при их выполнении....

    Запрос № 1

    # Query_time: 3.633825 Lock_time: 0.000241 Rows_sent: 6 Rows_examined: 450866
    # Rows_affected: 0
    SET timestamp=1529642993;
    SELECT
    p.id,
    p.url,
    p.brand_id,
    p.name,
    p.annotation,
    p.body,
    p.rating,
    p.votes,
    p.position,
    p.created as created,
    p.visible,
    p.featured,
    p.is_new,
    p.to_yandex,
    p.meta_title,
    p.meta_keywords,
    p.meta_description,
    p.views,
    b.name as brand,
    b.url as brand_url
    FROM s_products p


    LEFT JOIN s_brands b ON p.brand_id = b.id
    WHERE
    1


    AND (SELECT 1 FROM s_variants pv WHERE pv.product_id=p.id AND pv.compare_price>0 LIMIT 1) = 1
    AND (SELECT count(*)>0 FROM s_variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = 1
    AND p.visible=1
    ORDER BY p.position DESC
    LIMIT 0, 16;

    Запрос № 2


    # Query_time: 1.383552 Lock_time: 0.201190 Rows_sent: 14 Rows_examined: 225868
    # Rows_affected: 0
    SET timestamp=1529643912;
    SELECT v.name
    FROM s_variants AS v
    WHERE
    v.name <> ''
    AND v.product_id in('12263','12264','12265','12266','12267','12268','12269','12270','12271','12272','12273','12274','12275','12276','12277','12278','12279','12280','12281','12282','12283','12284','12285','12286','12287','12288','12289','12290','12291','12292','12293','12294','12295','12296','12297','12298','12299','12300','12301','12302','12303','12304','12305','12306','12307','12308','12309','12310','12311','12312','12313','12314','12315','12316','12317','12318','12319','12320','12321','12322','12323','12324','12325','12326', и тд ..... - безумная портянка из тысяч записей

    AND (v.stock>0 OR v.stock IS NULL)
    GROUP BY v.name;
    Может его как-то кешировать ?