如何使用GROUP BY问题加快查询搜索速度?

时间:2015-03-05 15:19:23

标签: mysql

在选择表格中的所有列时,我遇到了使用GROUP BY的问题,结果是速度方面表现不佳。

Select * from employee
group by customer_id;

上面的查询不会改变,它是强制性的和固定的。它需要17720ms才能长,结果必须花费更短的时间,这比我想要的结果低1分钟。因为表有很多列和记录,所以在查询搜索中需要花费很多时间。有什么解决方案可以解决这个问题。谢谢。

3 个答案:

答案 0 :(得分:1)

就像你的查询一样简单,它看起来几乎毫无意义......你在雇员表中不会有重复的员工ID,并且执行分组仍然会导致返回每一行,每列。

然而,那就是说,为了优化GROUP BY,你需要在该列上有一个索引......我认为这个索引已经存在,因为员工ID可能是该表的主键。

此外,您没有任何可以保证分组的聚合列。您只是试图寻找特定的员工吗?如果是这样,那么对于您要查找的条件,使用WHERE子句将是不同的查询。

反馈...

您更新了问题,并通过CUSTOMER ID(非员工ID)进行了分组。好的,但你真正想要分组的是什么..

或者......您是否想要由客户订购...换句话说,我想要一份所有员工的清单,但希望他们按照与之相关联的客户排序......如果是这种情况,你会想要像...这样的东西。

select *
   from employees
   ORDER BY
      customerID, 
      employeeLastName,
      employeeFirstName

如果没有看到您的表结构,但如果员工表有一个与他们关联的客户ID的列,则此查询会将同一客户的所有员工放在客户的常见PRE-SORT输出中,然后在该客户中,按员工姓名(最后,第一)排序。

如果您有另一张表与员工和客户之间的关系,我们也需要看到这一点,以便更好地提供答案。

答案 1 :(得分:0)

如果您有大量记录,那么重型LIKE BLOB,TEXT,NVARCHAR(200或更多)的列将大大减慢您的查询速度。我建议检查是否真的有必要从一开始就加载它们。

另外,GROUP BY看起来很奇怪。你究竟想用它实现什么目标?

答案 2 :(得分:0)

GROUP BY不仅奇怪,而且错误。如果您未在GROUP BY中指定所有非聚合列,则会为每列提供看似随机的值。删除GROUP BY或解释您认为自己需要它的原因。

或者“*”可能不正确。好的,您无法向我们展示您的真实列名,至少向我们展示SELECT的真实模式,即使它有伪名列。

我也很困惑为什么你称之为“搜索”。没有WHERE子句,这是“搜索”标准的用途。