MySQL在Having上使用索引吗?

| 我的查询的一部分看起来像:
HAVING date > \'2011-04-13 04:28:03\'
将date变量编入索引,这对查询有影响吗? EXPLAIN EXTENDED似乎没有使用索引,但是我不知道这是否仅是因为我正在测试的数据库中有4行。 我的查询:
SELECT AVG(slen) FROM
(
SELECT date, COUNT(id) as slen
FROM table
WHERE product_id = 2830
GROUP BY id
HAVING date > \'2011-04-13 04:28:02\'
) as T
有几行具有不同的日期值。我想选择日期> \'2011-04-13 04:28:02 \'的ID组。然后,我想要一个没有日期条件的,属于一个组的平均行数。 该查询本身尚无法使用。 我的另一个担心是,日期> \'2011-04-13 04:28:02 \'是否会使用我的日期列索引。 从此数据集中:
sid             datelast                product_id
782240551706    2011-04-13 00:51:52     2830
782240551706    2011-04-13 04:05:48     2830
782240551706    2011-04-13 04:28:03     2830
111111111111    2011-04-13 00:50:30     2830
所需结果: 应选择ID为782240551706的组,平均值应为3。 以下查询产生所需的结果:
SELECT AVG(slen) FROM
(
SELECT date, COUNT(id) as slen
FROM table
WHERE product_id = 2830
GROUP BY id
HAVING **max(date)** > \'2011-04-13 04:28:02\'
) as T
    
已邀请:
HAVING与GROUP BY结合使用,因此它是派生表。我没有看到如何使用索引。     
例如:
SELECT 
    column1, 
    count(column2) as count 
FROM table 
GROUP BY column1 
HAVING count > 1
该计数由您的查询计算。您的情况未将其编入索引。您可以将having子句更改为where子句。     
该查询没有意义,因为列“ date”位于GROUP BY中,但既不是聚合也不是GROUP BY子句。 任何普通的SQL数据库都会拒绝它。如果在严格模式下,mysql将拒绝它。 在这种情况下,行为基本上是不确定的。不要做。 我很确定您要在哪里过滤您的行,而不要进行过滤。而且,您不想在列列表中指定日期,请尝试使用min(date)或max(date)。 不,HAVING不会使用索引,因为它需要执行GROUP BY来查找HAVING匹配的组。通常情况下,最好使用WHERE,并且只在汇总上使用HAVING(例如HAVING COUNT(*)> 1)     

要回复问题请先登录注册