首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql Group By查询性能非常慢

问Mysql Group By查询性能非常慢
EN

Stack Overflow用户
提问于 2019-03-17 19:46:01
回答 1查看 67关注 0票数 0

我使用的是MySQL5.7,我有一个有1900516行的表格。我的查询在列上执行group by,该列已经建立了索引,但仍然需要时间来执行。下面是我的查询、执行计划和表模式。

代码语言:javascript
复制
    select  `type`,count(`type`)
    from templog 
    group by `type` ;

查询解释格式

代码语言:javascript
复制
            {
          "query_block": {
            "select_id": 1,
            "cost_info": {
              "query_cost": "376984.80"
            },
            "grouping_operation": {
              "using_filesort": false,
              "table": {
                "table_name": "templog",
                "access_type": "index",
                "possible_keys": [
                  "templog_type_idx"
                ],
                "key": "templog_type_idx",
                "used_key_parts": [
                  "type"
                ],
                "key_length": "1",
                "rows_examined_per_scan": 1856244,
                "rows_produced_per_join": 1856244,
                "filtered": "100.00",
                "using_index": true,
                "cost_info": {
                  "read_cost": "5736.00",
                  "eval_cost": "371248.80",
                  "prefix_cost": "376984.80",
                  "data_read_per_join": "84M"
                },
                "used_columns": [
                  "templogid",
                  "type"
                ]
              }
            }
          }
        }

表架构

代码语言:javascript
复制
    CREATE TABLE `templog` (
          `templogid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
          `userid` bigint(12) unsigned NOT NULL,
          `type` tinyint(3) NOT NULL DEFAULT '0',
          `location` json DEFAULT NULL,
          `ip` int(4) unsigned DEFAULT NULL,
          `createdat` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
          `status` tinyint(3) unsigned NOT NULL DEFAULT '1',
          PRIMARY KEY (`templogid`),
          KEY `templog_type_idx` (`type`) USING BTREE
    ) ENGINE=InnoDB AUTO_INCREMENT=1900516 DEFAULT CHARSET=utf8;

如何优化这个查询?

EN

回答 1

Stack Overflow用户

发布于 2019-03-17 23:30:57

它必须读取type索引中的所有1.9M行。这需要一些时间。EXPLAIN FORMAT=JSON确认它正在尽其所能地处理给定的模式和查询。

如果这是一个“日志”,在写入后永远不会是UPDATEd或DELETEd,那么可以使用数据仓库技巧。

通过构建和增量维护汇总表,您可以将等效查询速度提高10倍。更多。

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

https://stackoverflow.com/questions/55206682

复制
相关文章

相似问题

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