你能帮我加快查询速度吗?我的查询是可行的,但速度太慢:'(如何提高mysql的查询?
我想从我的表,其中coloumn word
的值满足不止一次得到所有行
我的查询看起来像未来:
select * from `t`
where id in (select id from `t` group by word having count(*)>1)
你能帮我加快查询速度吗?我的查询是可行的,但速度太慢:'(如何提高mysql的查询?
我想从我的表,其中coloumn word
的值满足不止一次得到所有行
我的查询看起来像未来:
select * from `t`
where id in (select id from `t` group by word having count(*)>1)
下面的查询应该给你更准确的结果...索引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,047秒,而不是我的12秒 – 2012-03-23 22:43:23
我不知道加入同一张桌子...... – 2012-03-23 22:44:42
select new.* from new
JOIN (select word from new group by word having count(*)>1) AS new1
USING (word)
select * from new where单词in(从新单词中选择单词(*)> 1)按字排序 – 2012-03-23 22:36:27
为什么'left join'不需要,'order by'也不是。你只是在增加数据库必须做的工作。另外,你应该使用'on'而不是'using',因为它限制在列的名字相同的地方,这意味着你不会有一致的代码。 – Ben 2012-03-23 22:47:19
@在OP发布在评论中的新编辑查询中有一个order by。此外,使用将在这种情况下工作,因为列名将永远是相同的,因为连接在同一个表上。你是正确的,不需要左连接 – 2012-03-23 22:51:14
添加索引可以加快您的查询(没有你如何创建表的细节)
固定:好的,知道了错误的,没有子查询,你可以得到这个词几次但不是所有的行,而你确实需要所有的行。
在你的子查询,您按'word',但返回'id'。如果'word'的值可以有多个与它关联的'id',我期望得到,因为我希望'id'在该表中是唯一的,你确定你得到了正确的结果查询? – 2012-03-23 22:31:11
你是对的!我错了 – 2012-03-23 22:35:19
select * from new where word in(从新组中选择单词by count(*)> 1)按单词排序 – 2012-03-23 22:35:53