我有8张桌子。当从所有这8个表中的搜索页面数据触发查询时,将拉出并显示在结果页面上。我想知道的是哪个是这个过程的最佳优化查询方法?
我现在所做的是:
$result = mysql_query("SELECT * FROM TG_dat,TG_dat1,TG_dat2,TG_dat3 WHERE
TG_dat.web = TG_dat1.web AND TG_dat.web = TG_dat2.web AND TG_dat.web =
TG_dat3.web AND TG_dat.web='".$uri."'")or die(mysql_error());
还是我需要使用它?
$result = mysql_query("SELECT * FROM TG_dat WHERE web='$uri'")or die(mysql_error());
$result = mysql_query("SELECT * FROM TG_dat1 WHERE web='$uri'")or die(mysql_error());
$result = mysql_query("SELECT * FROM TG_dat2 WHERE web='$uri'")or die(mysql_error());
$result = mysql_query("SELECT * FROM TG_dat3 WHERE web='$uri'")or die(mysql_error());
答案 0 :(得分:4)
您现有的查询非常完美 - 请尽量使用尽可能少的查询。
答案 1 :(得分:3)
对数据库的较少调用通常更好,因此您可以使用第一个。
但是,不是将所有表直接放入FROM子句中,通常认为在相关表(这些表看起来是这样的表)上使用join是一种好习惯。
例如:
"SELECT *
FROM TG_dat
LEFT JOIN TG_dat2 USING(web)
LEFT JOIN TG_dat3 USING(web)
WHERE TG_dat.web = '$uri'"
答案 2 :(得分:2)
不要太担心你给出的查询中的两个变体 - 它们的执行情况大致相同,但如果性能是问题,那么第一个将是我的选择 - 单个查询涉及单个往返服务器,更容易在客户端上处理结果。最好关注SELECT *
,SELECT <the fields you need>
会更有意义 - 您不需要在结果中多次返回网络字段。
答案 3 :(得分:0)
您现有的查询很好。重点是限制查询数据库服务器以提高效率