2012-03-23 60 views
1

你能帮我加快查询速度吗?我的查询是可行的,但速度太慢:'(如何提高mysql的查询?

我想从我的表,其中coloumn word的值满足不止一次得到所有行

我的查询看起来像未来:

select * from `t` 
where id in (select id from `t` group by word having count(*)>1) 
+3

在你的子查询,您按'word',但返回'id'。如果'word'的值可以有多个与它关联的'id',我期望得到,因为我希望'id'在该表中是唯一的,你确定你得到了正确的结果查询? – 2012-03-23 22:31:11

+0

你是对的!我错了 – 2012-03-23 22:35:19

+0

select * from new where word in(从新组中选择单词by count(*)> 1)按单词排序 – 2012-03-23 22:35:53

回答

3

下面的查询应该给你更准确的结果...索引word要提高你的表现:

select t1.* 
from new as t1 
join (select word from new group by word having count(*) > 1) as t2 
on t1.word = t2.word 
+0

!!!!谢谢 !!!!这样会带来同样的结果,但是工作0,047秒,而不是我的12秒 – 2012-03-23 22:43:23

+0

我不知道加入同一张桌子...... – 2012-03-23 22:44:42

0
select new.* from new 
JOIN (select word from new group by word having count(*)>1) AS new1 
USING (word) 
+0

select * from new where单词in(从新单词中选择单词(*)> 1)按字排序 – 2012-03-23 22:36:27

+0

为什么'left join'不需要,'order by'也不是。你只是在增加数据库必须做的工作。另外,你应该使用'on'而不是'using',因为它限制在列的名字相同的地方,这意味着你不会有一致的代码。 – Ben 2012-03-23 22:47:19

+0

@在OP发布在评论中的新编辑查询中有一个order by。此外,使用将在这种情况下工作,因为列名将永远是相同的,因为连接在同一个表上。你是正确的,不需要左连接 – 2012-03-23 22:51:14

0

添加索引可以加快您的查询(没有你如何创建表的细节)

固定:好的,知道了错误的,没有子查询,你可以得到这个词几次但不是所有的行,而你确实需要所有的行。