mysql - 如何通过使用临时文件排序来避免排序

标签 mysql

我需要创建什么索引来避免使用临时文件排序

  EXPLAIN SELECT   tid, sum(count)    
              FROM test  
                 WHERE cid = 1
                 GROUP BY tid
                 ORDER BY sum(count) DESC

   1    SIMPLE  test    ref     PRIMARY,id_UNIQUE,cid   cid     4   const   2   Using where; Using index; Using temporary; Using filesort

创建表:

   CREATE TABLE test(
           cid INT,
           tid INT,
            datedm INT,
           count INT,
            PRIMARY KEY(cid,tid,datedm),
           INDEX(cid,tid,count),
           UNIQUE INDEX id_UNIQUE(cid,tid,datedm)
          );

最佳答案

在这种情况下你不能:ORDER BY 是在一个不能被索引的聚合值上。

请注意,您的最后一个索引与主键相同。但是,如果您将其反转为 tid, cid 它可能会有所帮助,因为 GROUP BY 也暗示了一个 ORDER BY。但是,由于 MySQL 的工作方式,您可能会遇到 WHERE 子句的问题

关于mysql - 如何通过使用临时文件排序来避免排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16774756/

相关文章:

java - 从 Servlet 打印出来

mysql - 分页和表单标签问题

Mysql 脚本使用 if 语句和 case 进行更新

mysql - 来自 C 应用程序和 mysql 控制台的不同 mysql 触发器

mysql - 在tableview中显示从数据库下载的数据

mysql - 大规模执行中所有元素的 Bash 关闭

mysql - 在 MYSQL 中添加日期和检查 NULL 值

android - Web服务调试工具

mysql - 优先从mysql数据库中删除重复索引

javascript - 使用 PHP、mySQL 和 JS 填充下拉框时出现问题