group by 优化

去圣西罗-为尤文喝彩 去圣西罗-为尤文喝彩 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我有一个InnoDB表,~44,905,525行,7.3 GiB。
CREATE TABLE IF NOT EXISTS `m_t` (
`name` varchar(15) NOT NULL,
`col` smallint(2) NOT NULL,
`index` varchar(30) NOT NULL,
`date` int(10) NOT NULL,
PRIMARY KEY (`index`,`name`,`col`),
KEY `date` (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


#结构大致如下
name | col | index | date
1234 | 0 | word1 |1360230780
1234 | 1 | word1 |1360230780
1234 | 1 | word2 |1360230780
1235 | 0 | word3 |1360250840
1236 | 2 | word2 |1360250740
.....[/code]

name是文章编号,col是每篇文章的段落号,index是关键字(每个一列),date是文章的时间。

现在要查询符合包含某2个关键字的文章,按时间排列。

SELECT * FROM 
m_t a JOIN m_t b
ON a.name = b.name
WHERE
a.index='word1'
AND
b.index='word2'
Group by a.name
ORDER BY a.date
DESC LIMIT 10


没有Group by的话,只要0.05秒。
加group by 超慢,是索引关系还是查询语句关系?如何优化?谢谢。
...全文

相关推荐

MySQL优化GROUP BY方案

满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有)。在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建临时表。

weixin_38603704

MySQL优化GROUP BY(松散索引扫描与紧凑索引扫描)

满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有)。在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建临时表。        为GROUP BY使用索引的最重要的前提条件是所有GROUP BY列引用同一索引的属性,并且索引按顺序保存其关键字。是否用索引访问来代替临时表的使用还取决于在查询中使用了哪部分索引、为该部分指定的条件,以及选择的累积函数。        由于GROUP BY 实际上也同样会进行排序操作,而且与ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组

weixin_38504417

oracle中使用group by优化distinct

主要介绍了oracle中使用group by优化distinct的相关资料,需要的朋友可以参考下

weixin_38719540

MySQL group by语句如何优化

在MySQL中,新建立一张表,该表有三个字段,分别是id,a,b,插入1000条每个字段都相等的记录,如下: mysql> show create table t1\G *************************** 1. row *************************** Table: t1 Create Table: CREATE TABLE `t1` ( `id` int(11) NOT NULL, `a` int(11) DEFAULT NULL, `b` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY

weixin_38629939

处理group by 查询速度太慢的问题 数据量大.doc

实际项目中因表数据量大,发现查询速度很慢。记录此次排查和优化过程。希望对阅读到此文章的朋友有所帮助。

sunTeacher
评论 13
收藏 已收藏
分享
返回顶部