2013-10-25 59 views
0

我有一個SQL詳細如下,並希望有人能夠幫助我優化這一點,因爲我認爲它有點笨重......任何幫助感激地收到,謝謝。優化我的三級MySQL查詢

SELECT * FROM test.datalist 
Where UserName Like '%SearchString%' 
Or UserName In (
       Select Synonym 
       From synonyms 
       Where Synonym Like '%SearchString%' 
       OR ListRef = ( Select ListRef 
           From synonyms 
           Where Synonym Like '%SearchString%') 
       ); 

所有建議感激地收到。

+0

似乎是查詢被寫入w/o給出任何想法輸出中確切需要什麼。如果在內部和外部查詢中應用相同的過濾器,則區別是什麼? 「Where同義詞Like'%SearchString%'」「除非最內層查詢你肉過濾器」Where ListRef Like'%SearchString%'「 –

+0

如果你需要在2表和3列中搜索相同的模式,數據庫設計師做錯了什麼。 –

回答

0

下面的子查詢的一部分是沒有意義的,而你已經與Where Synonym Like '%SearchString%'沒有用匹配找到ListRef的同桌得到Synonym

Where Synonym Like '%SearchString%' 
OR ListRef = ( Select ListRef 
           From synonyms 
           Where Synonym Like '%SearchString%') 

otherway你可以嘗試加入

SELECT * FROM datalist d 
JOIN synonyms s ON (d.UserName =s.Synonym)  
Where d.UserName Like '%SearchString%' or s.Synonym Like '%SearchString%' 

我加入您的表格基於d.UserName =s.Synonym如果您在這些表格之間存在特定的關係,請將其應用於此表格,並在列表中填入適當的索引

+0

感謝您的意見,也許我應該解釋表格結構,因爲它顯然不清楚。在數據列表中是一個描述列,其中包含用戶輸入的自由文本。第二張表是列出單詞和短語的同義詞的兩列表,因此我們有諸如傳單,小冊子,傳單等等。 – enCue

+0

SQL所做的是返回所有描述行,其中存在SearchString或任何列出的同義詞搜索字符串。因此,第二個子查詢返回ListGroup是非常有意義的,第一個子查詢返回該組中的所有同義詞,主查詢返回所有包含SearchString或任何與該SearchString相關聯的同義詞的描述。 – enCue