EAV,多个左联接查询优化

时间:2020-03-20 07:38:52

标签: mysql database mariadb entity-attribute-value

任何帮助都会受到欢迎。请原谅我的无知,但我想知道是否还有其他人不得不遇到不良的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 :(得分:0)

我想知道是否还有其他人不得不遇到不良的EAV性能问题。

查看780个其他标记为attribute-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吗?

您需要整个桌子吗?它似乎有数百万行。