2012-02-19 108 views
0

我正在使用以下MySQL選擇查詢與幾個聯接。我想知道這是多麼好的選擇陳述應該是這樣的:Mysql - 數據庫選擇與幾個連接和表結構

SELECT * 

FROM table_news AS a 
    INNER JOIN table_cat AS b ON a.cat_id = b.id 
    INNER JOIN table_countries AS c ON a.country_id = c.id 
    INNER JOIN table_addresses AS d ON a.id = d.news_id 

WHERE a.deleted = 0 
    AND a.hidden = 0 
    AND a.cat_id = ".$search_cat." 
    AND a.country_id = ".$search_country." 
    AND a.title LIKE '%".$search_string."%' 
    OR a.deleted = 0 
    AND a.hidden = 0 
    AND a.cat_id = ".$search_cat." 
    AND a.country_id = ".$search_country." 
    AND a.subtitle LIKE '%".$search_string."%'" 

這似乎是很多聯接。即使表b和表c只包含3或4個字段,我想知道連接的數量是否會顯着減慢起始頁上的搜索速度?

將表d(街道,城市等)的字段放回到主表中是否會更好,因爲在執行此查詢時大部分時間都需要這些字段?

Thanx提前, 傑登

回答

0

我不認爲有必然是什麼毛病有三個連接。有幾件事你可以做,以確保查詢優化。首先,你絕不應該做SELECT * - 而是明確地聲明你想從數據庫中返回哪些字段。

此外,我會創建索引的所有你在where子句中的字段,以及你加入的所有字段。這可能是一種折衷 - 例如,如果您正在進行大量寫操作,那麼存在命中,因爲您需要每次都寫入索引。

+0

謝謝你christoph。很高興聽到,即使我仍然懷疑,如果從主表中分離出地址字段,這個查詢似乎沒有問題,但它的確很有意義?!我已經爲地址表的字段「news_id」添加了一個索引,它與主表的字段「id」相對應。添加後,mysql自動處理指標正確? – jayden 2012-02-19 23:05:18

+0

SELECT *只是爲了讓它更具可讀性...... – jayden 2012-02-19 23:12:40