2014-01-06 64 views
0

我想找到最有效的方式來查詢下表:代碼的僞是罰款查詢效率。載

City  Name Comment    Mentioned 

Tampa Steve "I don't like Jim" 
Tampa Jim  "Who is Steve" 
Lincoln Sarah "Where is Angie" 
Lincoln Angie "Hi Sarah" 

我想找個地方,從一個城市人們一提到有人從同一城市其他。有大量的數據,所以我需要最有效的方式。我知道如何以多種方式編寫查詢,但我正在尋找最佳方法。所以基本上史蒂夫「提及」吉姆,但如果史蒂夫提到薩拉,這是不相關的,因爲他們不是來自同一個城市。我正在尋找LINQ或SQL。 注意:吉姆可能有20個不同的評論,這就是爲什麼我不確定是否應該在評論中搜索作者之前創建一個清晰的列表。 在此先感謝

+1

確保您有評論全文索引,然後用對陣 – user1336827

+1

你怎麼了知道吉姆在談論同樣的史蒂夫?他甚至不知道他是誰。 – Jodrell

+0

這個名字是由城市獨一無二的。 – user2525463

回答

0
select t.Name, t1.Name Mentioned 
from table t 
inner join table t1 on t.City = t1.City 
where t.Comment like '%' + t1.Name + '%' 

不是MySQL用戶,所以我不知道這是否是有效的MySQL,但它是其他數據塊。

新增討論後:

select t1.City, t1.Name, names.Name Mentions 
from table t1 
cross join 
(
    select distinct x.Name, x.City 
    from table x 
) names 
where names.Name <> t1.Name 
and t1.Comment like '%' + names.Name + '%' 

(這是SQL Server語法的要求進行調整。)

+0

嗨。雖然這可能會起作用(不知何故...),但它遠非最有效的解決方案。 – Sebas

+0

確實如此,但是如果性能不可接受,一旦您有了工作,您就可以打開查詢計劃並從那裏開始。我可以看到一個優化,獲得獨特的城市/名稱對的列表並使用它,但是a)它掩蓋了他需要使用的技術,b)增加了輸入不會運行的查詢的機會。 –

+0

@simonatrcl這實際上是我現在正在做的「獲取唯一的城市/名稱對列表」,並在循環內部運行循環,並使用LINQ創建列表。我相信他們是一個更快的方式。 – user2525463