MySQL-MYSQL查询优化
有一张表,结构如下 :
+------------------+--------------+------+-----+---------+----------------+
| 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 | |
+------------------+--------------+------+-----+---------+----------------+
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这个sql语句只能增加sort_buffer_size的大小,避免磁盘的IO,按照mysql对group by的几条优化规则:
1、松散索引扫描
详细的可以参考mysql手册,对于聚合函数,只有max()和min()两个函数才能使用索引
2、紧凑索引扫描
“引用GROUP BY关键字元素的前面、中间关键字元素的查询中的所有列,有一个常量等式条件即足够了。等式条件中的常量填充了搜索关键字中的“差距”,可以形成完整的索引前缀。”
在mysql优化的方法中,有这么两条:
经常同时存取多列,且每列都含有重复值可考虑建立组合索引;
组合索引要尽量使关键查询形成索引覆盖,其前导列一定是使用最频繁的列。
所以你可以试试下面方法:
在STATUS和COUNT两字段上建立组合索引,以STATUS为前导列(如果该字段值很长,可以指定长度)
ALTER TABLE tc ADD INDEX status_count (STATUS(10),COUNT);