我们的应用程序中有两个查询,第一个很长,需要 30 秒,然后另一个查询 LIMIT 之前的行数:
SELECT DISTINCT SQL_CALC_FOUND_ROWS res.*,...GROUP BY...HAVING...ORDER BY fqa_value LIMIT 0,10;
SELECT FOUND_ROWS() as count
如果我们取出“ORDER BY fqa_value”,我们可以将速度从 30 秒优化到 1 秒。
所以我把所有东西都放在一个子选择中,然后对其进行排序:
select * from (
SELECT DISTINCT SQL_CALC_FOUND_ROWS res.*,...GROUP BY...HAVING...LIMIT 0,10;
) as temptable order by fqa_value;
但是,这给了我错误:“SQL_CALC_FOUND_ROWS 的使用/放置不正确”。
如果我取出 SQL_CALC_FOUND_ROWS,它会起作用:
select * from (
SELECT DISTINCT res.*,...GROUP BY...HAVING...ORDER BY fqa_value LIMIT 0,10
) as temptable order by fqa_value;
但是我没有在 GROUP BY 和 HAVING 之前选择的原始行数。
我如何才能(a)计算原始行数和(b)快速查询?我正在寻找一个纯粹的 MySQL 解决方案,这样我们就不必在必要时更改代码。