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