group by 优化
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能够做得更好,即通过索引访问而不用创建临时表。
MySQL优化GROUP BY(松散索引扫描与紧凑索引扫描)
满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有)。在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建临时表。 为GROUP BY使用索引的最重要的前提条件是所有GROUP BY列引用同一索引的属性,并且索引按顺序保存其关键字。是否用索引访问来代替临时表的使用还取决于在查询中使用了哪部分索引、为该部分指定的条件,以及选择的累积函数。 由于GROUP BY 实际上也同样会进行排序操作,而且与ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组
oracle中使用group by优化distinct
主要介绍了oracle中使用group by优化distinct的相关资料,需要的朋友可以参考下
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
处理group by 查询速度太慢的问题 数据量大.doc
实际项目中因表数据量大,发现查询速度很慢。记录此次排查和优化过程。希望对阅读到此文章的朋友有所帮助。


