MySQL - 简单SUM()

时间:2018-01-12 01:14:57

标签: mysql

我试图在MYSQL 5.7中做一个简单的总结(安装在我的笔记本上 - I5,8Gb ram)并且遇到了很大的性能问题。

如果我这样做:

SELECT distinct `Text Field`
FROM Table1
group by `Text Field`;

查询以7s运行并返回72行

如果我这样做:

SELECT sum(`Value Field`)
FROM Table1;

查询运行时间小于1秒,并返回1行总和。

但是,如果我这样做:

select `Text Field`, sum(`Value Field`)
from Table1
group by `Text Field`;

查询在连接超时之前运行1小时!

该表有26列(但我只在查询中使用这两个字段),有150万行和821mb。

我已经玩了一些内存变量:

table_open_cache=2000
tmp_table_size=256M
innodb_buffer_pool_size=1000M
innodb_log_file_size=500M

并尝试按以下方式运行查询:

select `Text Field`, sum(`Value Field`)
from (
        SELECT `Text Field`, `Value Field`
        FROM Table1
    ) as T1
group by `Text Field`;

一切都没有成功。

修改

我还有一个自动增加索引列。

1 个答案:

答案 0 :(得分:-3)

对于多个组键,快速查询不会对一组行执行任何操作。第一个只扫描后组密钥值。第二个将整个表视为一个组,并扫描组后键值。 (在这两种情况下,组后密钥都可以是表密钥,因此可以编入索引吗?)但是第三种密钥必须对表的每一行执行某些操作,包括按照组后密钥将它们收集在一起并添加它们。

学习使用UNIQUE NOT NULL(包括PRIMARY KEY)和其他索引和约束以及EXPLAIN。一般而言,阅读有关查询实现/执行/优化/性能的信息。特别是(特定版本)DBMS。