Мне нужно улучшить этот запрос SQL UPDATE. Запрос должен обновлять только первую строку, но я подозреваю, что он использует большую мощность при работе через все строки и запускает подзапрос для всех строк, потому что при использовании больших баз данных это очень медленно. Какие-либо предложения?Улучшение SQL UPDATE
UPDATE leads l
SET status='processing', processor='$processor'
WHERE pool IN ($pools) AND status='active'
ORDER BY (SELECT count(*) FROM calls c WHERE c.lead = l.id), id ASC
LIMIT 1
ОБНОВЛЕНИЕ
Медлительность действительно вызвано подвыборки. Типичным может быть 2000-3000 совпадений в таблице. Самый простой способ - построить столбец в таблице lead-table, который подсчитывает вызовы вручную, поэтому мне не нужен подзапрос, но это работающий сайт, на котором эти изменения необходимо сделать, поэтому это испортит порядок, если Я добавил колонку сейчас.
Но я полагаю, что это единственный способ избежать большого подзапроса.
Это звучит, как вы пропустили индекс? Поместите 'EXPLAIN' перед вашим запросом, чтобы увидеть, что он делает ... –
попробовал' EXPLAIN EXTENDED UPDATE ... '? 'EXPLAIN EXTENDED' возвращает некоторую дополнительную информацию о том, что происходит именно при запуске запроса UPDATE. –