2012-03-23 59 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

添加索引可以加快您的查詢(沒有你如何創建表的細節)

固定:好的,知道了錯誤的,沒有子查詢,你可以得到這個詞幾次但不是所有的行,而你確實需要所有的行。