Mysql 当调用Group By时,Codeigniter 3的查询速度非常慢

Mysql 当调用Group By时,Codeigniter 3的查询速度非常慢,mysql,codeigniter-3,Mysql,Codeigniter 3,我有这个疑问 SELECT `PR_CODIGO`, `PR_EXIBIR`, `PR_NOME`, `PRC_DETALHES` FROM `PROPRIETARIOS` LEFT JOIN `PROPRIETARIOSCONTATOS` ON `PROPRIETARIOSCONTATOS`.`PRC_COD_CAD` = `PROPRIETARIOS`.`PR_CODIGO` WHERE `PR_EXIBIR` = 'T' LIMIT 20 它运行速度非常快,不到1秒 如果我添加Group

我有这个疑问

SELECT `PR_CODIGO`, `PR_EXIBIR`, `PR_NOME`, `PRC_DETALHES` FROM `PROPRIETARIOS` LEFT JOIN `PROPRIETARIOSCONTATOS` ON `PROPRIETARIOSCONTATOS`.`PRC_COD_CAD` = `PROPRIETARIOS`.`PR_CODIGO` WHERE `PR_EXIBIR` = 'T' LIMIT 20
它运行速度非常快,不到1秒

如果我添加GroupBy,则运行需要几秒钟以上的时间。即使是按字段分组也是索引

我使用GROUPBY是因为上面的查询返回重复的行,我在另一个表中搜索一个姓名和他的联系人,show的4倍相同的姓名


如何解决此问题?

对于GROUP BY子句,LIMIT子句只有在GROUP BY操作折叠行之后才会应用

为了了解MySQL正在执行的操作以及优化器正在考虑和选择哪些索引,我们使用EXPLAIN

问题中未说明的是GROUPBY子句中有哪些字段列或表达式。所以我们只是猜测

根据问题中显示的查询

SELECT pr.pr_codigo
     , pr.pr_exibir
     , pr.pr_nome
     , prc.prc_detalhes
  FROM `PROPRIETARIOS` pr
  LEFT
  JOIN `PROPRIETARIOSCONTATOS` prc
    ON prc.prc_cod_cad = pr.pr_codigo
 WHERE pr.pr_exibir = 'T'
 LIMIT 20
我们对最合适的索引的猜测

 ... ON PROPRIETARIOSCONTATOS (prc_cod_cad, prc_detalhes)

 ... ON PROPRIETARIOS (pr_exibir, pr_codigo, pr_exibir, pr_nome) 
我们的猜测将根据GROUPBY子句中列出的列而变化。我们还可以建议使用另一种查询来返回等效的结果


但是不知道GROUPBY子句,不知道我们对每列来自哪个表的猜测是否正确,不知道列数据类型,不知道基数的任何估计,也不知道示例数据和预期输出。。。我们在瞎飞,只是在猜测。

我没有使用分组解决问题,但你的答案是一个很好的提示,可以使用分组解决未来的问题。我太累了,谢谢你。