EAV, оптимизация нескольких запросов на соединение слева - PullRequest
0 голосов
/ 20 марта 2020

Любая помощь будет приветствоваться. Прошу прощения за мое невежество, однако мне интересно, сталкивался ли кто-то еще с проблемами производительности EAV. У меня есть конкретный запрос, который занимает много времени. Каков наилучший способ увеличить скорость на этом?

 SELECT * FROM
(
    SELECT f.*, p.`timestamp`
    FROM `tObjectValues` ov
    INNER JOIN `tObjectProperties` op ON ov.`propertyId` = op.`id`
    INNER JOIN `tObjects` o ON op.`objectId` = o.`id`
    INNER JOIN `files` f ON SUBSTRING(ov.`value`, CHAR_LENGTH('cache://content//')) = f.`filename`
    LEFT JOIN `publishFiles` pf ON f.`id` = pf.`fileId`
    LEFT JOIN `publishes` p ON p.`id` = pf.`publishId` AND o.`appId` = p.`appId` AND p.`type` = 'l'
    WHERE o.`status` = 1 AND op.`status` = 1 AND ov.`status` = 1 AND ov.`value` LIKE 'cache://content/%' AND o.`appId` = 2
    ORDER BY p.`timestamp` DESC
    LIMIT 0, 10000000
) s
GROUP BY s.`id`

Я запустил функцию объяснения, чтобы углубиться в проблему, однако мне было интересно, может ли кто-нибудь, у кого была подобная проблема, помочь в оптимизации.

enter image description here

1 Ответ

0 голосов
/ 29 марта 2020

Мне интересно, сталкивался ли кто-то еще с проблемами производительности EAV.

Ознакомьтесь с 780 другими вопросами, помеченными entity-attribute-value; большинство ворчит по поводу производительности.

Здесь обсуждается зло EAV и предоставляется некоторая помощь: http://mysql.rjweb.org/doc.php/eav

Это указывает на небрежную схему, используемую WP, и предлагает как это улучшить. Возможно, его советы применимы к вашей схеме: http://mysql.rjweb.org/doc.php/index_cookbook_mysql#speeding_up_wp_postmeta

Вам действительно нужны дополнительные GROUP BY на конце?

Вам нужна вся таблица? Кажется, это миллионы строк в длину.

...