MySQL-MYSQL查询优化

MySQL-MYSQL查询优化

清晨说ぺ晚安 发布于 2016-11-22 字数 938 浏览 1193 回复 2

有一张表,结构如下 :

+------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+----------------+
| ID | bigint(20) | NO | PRI | NULL | auto_increment |
| DTYPE | varchar(31) | YES | | NULL | |
| COUNT | int(11) | YES | | NULL | |
| STATUS | varchar(255) | YES | | NULL | |
| TYPE | varchar(255) | YES | | NULL | |
| BACKENDRECORD_ID | bigint(20) | YES | MUL | NULL | |
| FRONTRECORD_ID | bigint(20) | YES | MUL | NULL | |
+------------------+--------------+------+-----+---------+----------------+

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

想挽留 2017-08-04 2 楼

这个sql语句只能增加sort_buffer_size的大小,避免磁盘的IO,按照mysql对group by的几条优化规则:
1、松散索引扫描
详细的可以参考mysql手册,对于聚合函数,只有max()和min()两个函数才能使用索引
2、紧凑索引扫描
“引用GROUP BY关键字元素的前面、中间关键字元素的查询中的所有列,有一个常量等式条件即足够了。等式条件中的常量填充了搜索关键字中的“差距”,可以形成完整的索引前缀。”

甜柠檬 2017-01-24 1 楼

在mysql优化的方法中,有这么两条:
经常同时存取多列,且每列都含有重复值可考虑建立组合索引;
组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。

所以你可以试试下面方法:

在STATUS和COUNT两字段上建立组合索引,以STATUS为前导列(如果该字段值很长,可以指定长度)

 ALTER TABLE tc ADD INDEX status_count (STATUS(10),COUNT);