2016-10-20 176 views
0

我有一個關於組織我的web應用程序(php + mysql)的問題。我有很多桌子。我必須通過不同的參數搜索它。例如:國家:2和類別1:33和語言:3。mysql:組織搜索一棵大樹

select distinct s.id from tbl_item s 
left join tbl_item_act ep on s.id = ep.item_id 
left join tbl_item_act_category cl3 on cl3.id = ep.category_id 
left join tbl_item_act_category cl2 on cl2.id = cl3.parent_id 
left join tbl_item_act_category cl1 on cl1.id = cl2.parent_id 
left join tbl_city ci on ci.id = s.city_id 
left join tbl_country co on co.id = ci.country_id 
left join tbl_language la on la.id = cl2.language_id 
left join tbl_item_subject sbb on sbb.item_id = s.id 
left join tbl_subject sb on sb.id = sbb.subject_id and sb.subject_type = 'subject' 
left join tbl_subject ev on ev.id = sbb.subject_id and ev.subject_type = 'event' 
left join tbl_season se on se.id = cl1.season_id or se.id = cl2.season_id 
left join tbl_education_type et on et.id = s.education_type_id 
left join tbl_item_tag_binding stagb on stagb.item_id = s.id 
left join tbl_item_tag stag on stag.id = stagb.tag_id 
left join tbl_item_type_binding stb on stb.item_id = s.id 
left join tbl_item_type st on st.id = stb.item_type_id 
where s.original_id is null and cl1.id = 33 and la.id = 2 and se.id = 2 

我必須在一頁上執行9-10個查詢。 我需要約50ms每個查詢。我試圖生成一個表(如視圖),並在這裏存儲連接的數據(作爲緩存表),但它存儲了數百萬行,搜索每個查詢需要大約500ms。我試過nosql(mongodb)搜索(大數據樹),它需要很短的時間。大約20-30毫秒,但它對我來說很重要。

在我的數據結構中通過許多參數創建快速搜索的最佳實踐是什麼?

對不起,我的英語。

回答

0

它的大挑戰,但你需要在這裏的Apache的Solr或Lucene

+0

我讀solr是全文搜索。我的領域是整數。在solr上構建它是否重要?我在我的web應用程序中使用sphinx。我可以用它作爲solr的模擬器嗎?萬分感謝! – mitch31

+0

你也可以在這裏使用獅身人面像(它的模擬solr和lucene,每個在特定情況下都有優缺點)。對我而言 - 您必須從問題中的龐大查詢實現數據到獅身人面像,以加快查詢速度(並且在每個時間段重建數據,取決於您的需求) – webcitron