php - 左连接中的Mysql索引

标签 php mysql symfony

我正在使用 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表、结构和索引:

Article_en table

索引为:

  • ID 是主要且唯一的
  • 索引到位
  • home_position 中的索引
  • 在 Publication_date 中启用索引
  • author_id 中的索引
  • author_id 中的外键
  • arabic_id、dutch_id、german_id ... 中的外键

这是fos_user_user 表:

Fos_user_user table

索引为:

  • ID 中的主要且唯一。
  • username_canonical 中的唯一性
  • 在 email_canonical 中独一无二
  • id 中的索引

计划

当要显示特定用户的最新 25 篇英文文章时,此查询由 sonata admin bundle 执行。我每次在sonata管理包中执行这个查询,这个查询是以分页模式执行的,我的目标是尝试提高这个查询的性能,以改善应用程序这部分的用户体验。

最佳答案

在 3 列上添加索引 a0_.author_idf1_.ida0_.home_position

a0_.home_position 上建立索引,因为它用于对结果进行排序。

关于php - 左连接中的Mysql索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46242275/

相关文章:

php - 运行脚本并执行 PHP 进行输出

mysql - 使用变量进行 case 语句 mysql

mysql - 返回分组变量排名最低的 ID

mysql - #1064 - 您的 SQL 语法有误;

symfony - 如何禁用 KnpMenuBundle 中标签的 HTML 转义

php - 使用 and 过滤 mysql 内连接一对多结果

php - 如何修复 PHP amqp?

symfony - Twig/Symfony 2 中 "default"过滤器和 bool 宏参数的错误?

javascript - 如何将ajax调用中的数组传递给 Controller ​​并使用Symfony 3返回它

php - 如何通过 PHP 设置文本框的值?