livetv

Рейтинг
266
Регистрация
10.02.2015
В SET должны быть поля того индекса, который в фильтре WHERE
livetv #:
А тут www.orbitasmarthouse.com вообще непонятно

Вот еще gedeon-krd.ru

Если подклеить этот домен, сколько перейдет получателю? 

Возможно ТСу нужен свой дропбокс

А так?

EXPLAIN
UPDATE
        xyfq1_professions AS t1
INNER JOIN
        xyfq1_items AS t2 ON t1.item_id = t2.id
SET
        t1.comments = t2.comments
WHERE
        t2.comments > 0

Но это будет необходимо делать 2 запроса. И смотреть на время без 

EXPLAIN

Вы говорили, выбирается 200 полей, правда с JOIN

Но EXPLAIN говорит, что по каждому индексу найдено полтаблицы

Mysql решает, что быстрее всю таблицу считать, чем мудохаться с индексом

Покажите инфу по индексам второй таблицы

Dram #:

UPDATE  xyfq1_professions AS t1

inner JOIN  STRAIGHT_JOIN xyfq1_items AS t2 

SET t1.average = t2.average, t1.comments = t2.comments 

WHERE t1.item_id = t2.id and (t2.average > 0 OR t2.comments > 0)

STRAIGHT_JOIN делать так:

EXPLAIN
SELECT
        *
FROM
        xyfq1_items AS t2
STRAIGHT_JOIN
        xyfq1_professions AS t1 ON t1.item_id = t2.id
WHERE
        (t2.average > 0 OR t2.comments > 0)

А что выводит

EXPLAIN
SELECT
        *
FROM
        xyfq1_items AS t2
WHERE
        (t2.average > 0 OR t2.comments > 0)

и

EXPLAIN
SELECT
        *
FROM
        xyfq1_items AS t2
WHERE
        t2.average > 0

и

EXPLAIN
SELECT
        *
FROM
        xyfq1_items AS t2
WHERE
        t2.comments > 0

Сбросьте весь запрос текстом

Возможно в первой таблице лишние индексы

Можно попробовать поменять порядок JOIN и джойнить через STRAIGHT_JOIN

Возможно OR нужно заменить на 2 запроса, чтобы каждый запрос мог заюзать индекс второй таблицы

Ну фильтрация происходит по полям второй таблицы

С информации об индексах и EXPLAIN можно сделать вывод, что таблицы имеют одинаковое число записей, 1 к 1.

А также индексу по сути не чего фильтровать, базе нужно прочитать всю таблицу.

Можете условие с WHERE переместить в ON для JOIN.

Всего: 2580