任何帮助都会受到欢迎。请原谅我的无知,但我想知道是否还有其他人不得不遇到不良的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`
我已经运行了解释功能来进一步研究该问题,但是我想知道是否有任何类似问题的人可以帮助优化。
答案 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
吗?
您需要整个桌子吗?它似乎有数百万行。