2010-10-02 38 views
1

我的查询是非常大的:我是否正确加入这4个表格?

SELECT n1.*, n2.rating, n3.*, n4.* 
FROM stats n1 
INNER JOIN members n2 
ON n1.n_id = n2.id 
INNER JOIN add_info n3 
ON n1.n_id = n3.n_id 
INNER JOIN other_table n4 
ON n1.code = n4.code 
WHERE n1.n_id = {$member_id} AND n1.code='{$some_code}' 

上午我做正确吗?如果是的话,我可以让它更好更好,更优化?因为我真的需要来自所有4个表格的信息。

谢谢。

+2

您的查询不是**那**不好。这可能有点大,但我看过的查询比这更糟糕。 – 2010-10-02 21:50:27

+2

查询当然不是非常大,它实际上相当小(复杂的查询可以有100行和更多)。至于“变得更好”:你为什么觉得它不好?你想做什么更好?它看起来很好张贴。 – sleske 2010-10-02 21:52:36

回答

2

老实说它看起来不错。

当您询问优化时,请记住,您可以针对不同目标优化代码。例如,您可以优化性能 - 您希望代码尽可能快地完成其目的。您还可以对易于阅读的代码进行优化。您可以优化可维护性或可测试性。在现实世界中,你通常会平衡每个目标,以实现适合这种情况的事情。

如果您发现自己经常加入所有这些表,请考虑使用view以使各个查询更易于编写,读取和维护。

2

如果从所有四个表中获取数据是您所需要的,这并不坏。确保您的连接密钥上有indexes,并考虑使用prepared statements以提高性能并防止SQL注入。

您可以在SELECT子句中使用子查询,但我怀疑这会有助于提高性能。

2

这个查询看起来相当不错。您可能想查看是否可以稍微限制选择列表,明确命名列而不是简单地询问n1。*,n3。*和n4。*。

您的查询需要多长时间?如果您对性能不满意,请检查您的连接索引。