Mysql-具有多个联接和表结构的db select

Mysql-具有多个联接和表结构的db select,mysql,join,Mysql,Join,我正在使用以下mysql select查询和几个连接。我想知道这是否是一个好的select语句的样子: 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

我正在使用以下mysql select查询和几个连接。我想知道这是否是一个好的select语句的样子:

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(street、city等)中的字段放回主表会更好吗,因为在执行此查询的大部分时间都需要这些字段

Thanx提前,
Jayden

我认为有三个连接不一定有什么问题。您可以做一些事情来确保查询得到优化

首先,您永远不应该执行SELECT*——而是显式地声明要从数据库返回哪些字段


此外,我将为where子句中的所有字段以及要加入的所有字段创建索引。这可能有点折衷——例如,如果您正在执行大量写入操作,则会遇到问题,因为您每次都需要写入索引。

谢谢christoph。很高兴听到这样的消息,查询似乎还可以,尽管我仍然在想,从主表中分离地址字段是否有意义?!在各自的索引中,我allready向addresses表的字段“news_id”添加了一个索引,该索引与主表的字段“id”相对应。添加后,mysql会自动处理indizes,对吗?