Проблема после обновления mysql до версии 5.6
Добавлено: Пт апр 12, 2013 6:21 am
После обновление Mysql до 5.6 мы столкнулись со следующей проблемой: клиенты не могут войти в свой кабинет. Оказалось, что при этом бесконечно долго выполняется запрос:
SELECT o.invoice_id, o.orders, o.unit, o.counts, o.price, o.fees_id
FROM docs_invoice_orders o
WHERE.
o.invoice_id IN.
(
SELECT d.id
FROM.
(docs_invoices d, docs_invoice_orders o).
LEFT JOIN users u ON (d.uid=u.uid)
LEFT JOIN admins a ON (d.aid=a.aid)
LEFT JOIN docs_invoice2payments i2p ON (d.id=i2p.invoice_id)
LEFT JOIN payments p ON (i2p.payment_id=p.id)
LEFT JOIN companies c ON (u.company_id=c.id)
WHERE u.uid='4448'
);
После анализа выяснили, что вложенный подзапрос ( IN (SELECT ….)) может возвращать набор 84000 записей, уникальными значением в котором только 3. Непонятным осталась роль таблицы docs_invoice_orders o ( docs_invoices d, docs_invoice_orders o). Она не участвует ни в каких соединениях в подзапросе и условиях WHERE и приводит к декартовому произведению. Удаление этой таблицы из списка выборки приводит к нормальной работе основного запроса
SELECT o.invoice_id, o.orders, o.unit, o.counts, o.price, o.fees_id
FROM docs_invoice_orders o
WHERE.
o.invoice_id IN.
(
SELECT d.id
FROM.
(docs_invoices d, docs_invoice_orders o).
LEFT JOIN users u ON (d.uid=u.uid)
LEFT JOIN admins a ON (d.aid=a.aid)
LEFT JOIN docs_invoice2payments i2p ON (d.id=i2p.invoice_id)
LEFT JOIN payments p ON (i2p.payment_id=p.id)
LEFT JOIN companies c ON (u.company_id=c.id)
WHERE u.uid='4448'
);
После анализа выяснили, что вложенный подзапрос ( IN (SELECT ….)) может возвращать набор 84000 записей, уникальными значением в котором только 3. Непонятным осталась роль таблицы docs_invoice_orders o ( docs_invoices d, docs_invoice_orders o). Она не участвует ни в каких соединениях в подзапросе и условиях WHERE и приводит к декартовому произведению. Удаление этой таблицы из списка выборки приводит к нормальной работе основного запроса