我使用下面的mysql select-query和几个连接。我想知道这是不是一个比较好的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中的字段(街道、城市等)放回到主表中是不是更好,因为执行此查询的大部分时间都需要它们?
提前谢谢你,杰登
发布于 2012-02-20 06:59:51
我不认为有三个joins有什么问题。有几件事可以确保查询得到优化。
首先,你不应该做SELECT *-而是明确地声明你想要从数据库中返回哪些字段。
此外,我将在where子句中的所有字段以及要连接的所有字段上创建索引。这可能是一种权衡-例如,如果你正在做大量的写操作,那么就会有一个命中,因为你每次都需要写索引。
https://stackoverflow.com/questions/9354032
复制相似问题