优化sql join查询,比较查询效果

| 我是一名学生,负责我学院的Moody CMS(课程管理系统)模块。我必须为我的模块编写一些联接查询。我无法更改表结构,它们几乎是一成不变的(我没有将它们赋予我)。 我没有编写大型数据库查询的经验。我已经创建了模块的工作原型,现在我正在尝试组织代码/优化查询等。 任务: | id |任务 -------------------- | 1 | task1 | | 2 | task3 | | 3 | task3 | | 4 | task4 | | ... | ... | 资产: | id |资产| -------------------- | 1 | task1 | | 2 | task3 | | 3 | task3 | | 4 | task4 | | ... | ... | TaskAsset: | id | taskid | assetid |系数| ----------------------------------------------- | 1 | 2 | 33 |系数1 | | 2 | 5 | 35 |系数2 | | 3 | 6 | 36 |系数3 | | 4 | 8 | 37 |系数4 | | 5 | ... | ... | ... |
$query = \"SELECT TaskAsset.id as id, Assets.asset AS asset, Tasks.task AS task
, coefficient
FROM Tasks, Assets, Taskasset
WHERE Taskasset.taskid= Tasks.id AND TaskAsset.assetid = Assets.id\";

$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result))
{
  echo $row[\'id\'].\" - \".$row[\'asset\'].\" - \".$row[\'task\'] . $row[\'coefficient\'];
  echo \"<br />\";
}
问题: 1.)因此,如果表结构是这样的,我的查询是否有效? 如果是的话,如果我必须连接更多表,简单连接仍然有效吗?喜欢4还是5? 2.)我如何评价查询的有效性?在phpmyadmin中,我可以看到查询运行所花费的时间。我从来没有使用过其他任何东西,因为我的表中的记录很少,所以没关系。     
已邀请:
        我唯一会做不同的事情是显式指定联接。
$query = \"SELECT ta.id as id, a.asset AS asset, t.task AS task
, coefficient
FROM TaskAsset ta
JOIN Tasks t ON ta.taskId = t.id
JOIN Assets a ON ta.assetId = a.id\";
这做同样的事情,但是我个人更喜欢它。也就是说,您应该尝试对查询运行query2ѭ。在那您会看到压力点。     
        从最佳角度来看,您的查询很好,假设索引存在于表的id字段中。使用正确的索引,您可以连接更多表,并且性能仍然会很好。 您应该尝试使自己熟悉ANSI连接语法-因为它比旧的
FROM x, y, z ...
样式连接更易于阅读-而且也更容易出错!     
        此查询适合于所需的结果。 TaskAssets是一个映射表,旨在通过外键将Task和Asset的列连接在一起。您需要查看结果表中所有三个表的列,因此这是最有效的方法。     
        比查询更重要的是表中的索引。 你在做
SELECT ta.id as id, a.asset AS asset, t.task AS task, coefficient
FROM TaskAsset ta
JOIN Tasks t ON ta.taskId = t.id      <-- equi join here
JOIN Assets a ON ta.assetId = a.id    <-- another equi join.
该查询具有两个等联接。 始终在等联接中涉及的字段上分配索引。 考虑在
where
子句中涉及的字段上分配索引(此查询不包含任何查询,但仅此而已) 强烈考虑将索引放在
group by
子句中使用的字段上     

要回复问题请先登录注册