在选择表格中的所有列时,我遇到了使用GROUP BY的问题,结果是速度方面表现不佳。
Select * from employee
group by customer_id;
上面的查询不会改变,它是强制性的和固定的。它需要17720ms才能长,结果必须花费更短的时间,这比我想要的结果低1分钟。因为表有很多列和记录,所以在查询搜索中需要花费很多时间。有什么解决方案可以解决这个问题。谢谢。
答案 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子句,这是“搜索”标准的用途。