发布
社区首页 >问答首页 >mysql上group by + SUM查询的索引

mysql上group by + SUM查询的索引
EN

Stack Overflow用户
提问于 2011-08-26 22:08:42
回答 4查看 612关注 0票数 1

我有一个具有以下模式的表:

代码语言:javascript
代码运行次数:0
复制
    CREATE TABLE `wordtrend` (
      `oid` bigint(20) NOT NULL AUTO_INCREMENT,
      `monitorId` bigint(20) DEFAULT NULL,
      `nGram` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
      `nGramWord` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
      `negatives` bigint(20) DEFAULT NULL,
      `neutrals` bigint(20) DEFAULT NULL,
      `positives` bigint(20) DEFAULT NULL,
      `total` bigint(20) DEFAULT NULL,
      `trendCut` datetime DEFAULT NULL,
      PRIMARY KEY (`oid`)
    ) ENGINE=MyISAM 
      AUTO_INCREMENT=358539 
      DEFAULT CHARSET=utf8  COLLATE=utf8_unicode_ci

是否可以创建索引以高效地运行以下查询?

代码语言:javascript
代码运行次数:0
复制
SELECT nGram
     , nGramWord
     , SUM(total) AS sTotal
     , SUM(positives)
     , SUM(negatives)
     , SUM(neutrals) 
FROM WordTrend 
WHERE monitorId = 21751021 
  AND trendCut >= '2011-01-01 00:00:00' 
GROUP BY nGram
       , nGramWord 
ORDER BY sTotal DESC

我们已经尝试了以下操作:

代码语言:javascript
代码运行次数:0
复制
KEY `RollupIndex` (`monitorId`,`trendCut`)
KEY `RollupIndex2` (`monitorId`,`nGram`,`trendCut`)

但是在额外的一列中,我们得到了"Using where;Using temporary;Using filesort“。提前谢谢。

EN

回答 4

Stack Overflow用户

发布于 2011-08-26 22:12:56

  1. 您可以按不带索引的列进行排序,因此您可以使用temporary;使用filesort
  2. 来使用where;-您可以使用带索引或不带索引的where在where子句中进行搜索。
票数 0
EN

Stack Overflow用户

发布于 2011-08-26 22:31:25

您可以使用ORDER- 'ORDER BY sTotal DESC',因此在sTotal字段上建立索引可能会有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2011-08-27 03:10:05

尝试不同的组合键(nGramnGramWordtotal)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7205905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档