Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL组速度非常慢_Mysql_Performance_Group By - Fatal编程技术网

MySQL组速度非常慢

MySQL组速度非常慢,mysql,performance,group-by,Mysql,Performance,Group By,我有下面的SQL查询 SELECT CustomerID FROM sales WHERE `Date` <= '2012-01-01' GROUP BY CustomerID 尝试在(日期、客户ID)上放置索引 请参阅mysql手册以优化分组查询:- 如果您使用以下EXPLAIN,您可以了解mysql是如何生成结果的:- EXPLAIN SELECT CustomerID FROM sales WHERE `Date` <= '2012-01-01' GROUP BY Custo

我有下面的SQL查询

SELECT CustomerID FROM sales WHERE `Date` <= '2012-01-01' GROUP BY CustomerID
尝试在(日期、客户ID)上放置索引

请参阅mysql手册以优化分组查询:-

如果您使用以下
EXPLAIN
,您可以了解mysql是如何生成结果的:-

EXPLAIN SELECT CustomerID FROM sales WHERE `Date` <= '2012-01-01' GROUP BY CustomerID

EXPLAIN SELECT CustomerID FROM sales WHERE`Date`这一个不是会更快并实现同样的效果吗

SELECT DISTINCT CustomerID FROM sales WHERE `Date` <= '2012-01-01'

从sales中选择DISTINCT CustomerID,其中'Date`不知道表架构是什么样子,很难确定,但如果在
Date
CustomerID
上添加多列索引,可能会有所帮助。这就省去了MySQL对
groupby
语句进行完整表扫描的麻烦。因此,请尝试
更改表sales ADD INDEX(日期,CustomerID)

试试这个:

SELECT distinct CustomerID FROM sales WHERE `Date` <= '2012-01-01'

从sales中选择distinct CustomerID,其中'Date`我遇到了相同的问题,我将关键字段更改为相同的排序规则,从而解决了问题。要连接表的字段具有不同的Collate值。

是否可以发布表架构(创建表的脚本)不确定是否发布了实际查询。但是在这个查询中,如果没有分组函数,那么需要
分组依据
什么呢?Aziz,我需要返回customer的唯一值在这种情况下,在查询中使用
DISTINCT
,并删除
分组依据
。mysql中类似于
selectdistinct CustomerID…
的内容DISTINCT只是groupby的一个特例,selectdistinct对我来说比selectby…groupby快得多。在一个具有适当索引和排序结果的1500万行表上,SELECT…GROUP BY大约需要3.5秒,SELECT DISTINCT大约需要0.1秒。作为一个刚刚开始掌握优化查询和表的窍门的人,这个小金块是非常宝贵的。谢谢。@ArthurGoldsmith不用担心:)
SELECT distinct CustomerID FROM sales WHERE `Date` <= '2012-01-01'