我试图在mysql 5.7(安装在我的笔记本上-i5,8gbram)中做一个简单的求和,但是性能有很大的问题。
如果我这样做了:
SELECT distinct `Text Field`
FROM Table1
group by `Text Field`;
查询以7秒运行,返回72行
如果我这样做了:
SELECT sum(`Value Field`)
FROM Table1;
查询在不到1s的时间内运行,并返回一行总和。
但是,如果我这样做:
select `Text Field`, sum(`Value Field`)
from Table1
group by `Text Field`;
查询在连接超时前运行1小时!
这个表有26列(但我只在查询中使用这2个字段),有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条答案
按热度按时间yduiuuwa1#
快速查询不会对多个组键的一组行执行任何操作。第一个只扫描post组键值。第二种方法将整个表视为一个组,并扫描post组键值(在这两种情况下,post组键可能是表键,因此被索引了?),但第三种情况必须处理表的每一行,包括按照post组键将它们收集在一起并添加它们。
学会使用unique not null(包括主键)等索引和约束并加以说明。阅读有关查询实现/执行/优化/性能的一般信息&对于特定的(特定版本的)dbms。