我试图在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`;
一切都没有成功。
修改
我还有一个自动增加索引列。
答案 0 :(得分:-3)
对于多个组键,快速查询不会对一组行执行任何操作。第一个只扫描后组密钥值。第二个将整个表视为一个组,并扫描组后键值。 (在这两种情况下,组后密钥都可以是表密钥,因此可以编入索引吗?)但是第三种密钥必须对表的每一行执行某些操作,包括按照组后密钥将它们收集在一起并添加它们。
学习使用UNIQUE NOT NULL(包括PRIMARY KEY)和其他索引和约束以及EXPLAIN。一般而言,阅读有关查询实现/执行/优化/性能的信息。特别是(特定版本)DBMS。