我正确加入这4张桌子吗?

时间:2010-10-02 21:47:54

标签: mysql join

我的查询非常大:

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个表的信息。

谢谢。

3 个答案:

答案 0 :(得分:2)

老实说,它看起来并不太糟糕。

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

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

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

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

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

相关问题