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子句,不知道我们对每列来自哪个表的猜测是否正确,不知道列数据类型,不知道基数的任何估计,也不知道示例数据和预期输出。。。我们在瞎飞,只是在猜测。我没有使用分组解决问题,但你的答案是一个很好的提示,可以使用分组解决未来的问题。我太累了,谢谢你。