我正在使用 symfony 和 sonata 管理包,在管理部分我有这个查询:
SELECT DISTINCT
a0_.id AS id_0,
a0_.home_position AS home_position_1
FROM article_en a0_
LEFT JOIN fos_user_user f1_ ON a0_.author_id = f1_.id
ORDER BY a0_.home_position DESC
LIMIT 25
OFFSET 0
查询大约需要 1 秒,对于大约 25,000 行的 article_en
表来说太多了。我想使用一些索引来提高此查询的性能,但我所有的尝试都没有成功。
有什么提高性能的建议吗?
编辑
我解释了数据库中表的结构。这是article_en表、结构和索引:
索引为:
- ID 是主要且唯一的
- 索引到位
- home_position 中的索引
- 在 Publication_date 中启用索引
- author_id 中的索引
- author_id 中的外键
- arabic_id、dutch_id、german_id ... 中的外键
这是fos_user_user 表:
索引为:
- ID 中的主要且唯一。
- username_canonical 中的唯一性
- 在 email_canonical 中独一无二
- id 中的索引
计划
当要显示特定用户的最新 25 篇英文文章时,此查询由 sonata admin bundle 执行。我每次在sonata管理包中执行这个查询,这个查询是以分页模式执行的,我的目标是尝试提高这个查询的性能,以改善应用程序这部分的用户体验。
最佳答案
在 3 列上添加索引 a0_.author_id
、f1_.id
和 a0_.home_position
在 a0_.home_position
上建立索引,因为它用于对结果进行排序。
关于php - 左连接中的Mysql索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46242275/