当前位置: 首页 > 面试题库 >

多表选择与JOIN(性能)

井昊乾
2023-03-14
问题内容

从MySQL中的多个表中选择时,以下两个查询均返回相同的结果集。

这些查询中的一个比另一个查询 更好
或更有效吗?根据我在一个小的数据集(每个表中约有2000行)的测试中,它们都在大约相同的执行时间上返回了相同的结果集。

查询1:

SELECT
    *
FROM
    products,
    product_meta,
    sales_rights
WHERE 
    (
        products.id = product_meta.product_id
        AND products.id = sales_rights.product_id
    )
    AND (...)
LIMIT 0,10;

查询2:

SELECT
    *
FROM
    products
INNER JOIN product_meta ON products.id = product_meta.product_id
JOIN sales_rights ON product_meta.product_id = sales_rights.product_id 
WHERE
    (...)
LIMIT 0,10;

问题答案:

它们是相同的,但是语法不同。因此,您不应该期望这两种语法之间的性能差异。但是,建议使用最后一种语法(ANS
SQL-92语法),有关更多详细信息,请参见以下内容:

  • 坏习惯:使用老式的JOIN。
  • SQL JOIN:USING,ON或WHERE之间有区别吗?


 类似资料:
  • 问题内容: 如果我只需要2/3列,而是查询而不是在select查询中提供这些列,那么关于更多/更少I / O或内存的性能是否会有所下降? 如果我确实选择了*,则可能会出现网络开销。 但是在选择操作中,数据库引擎是否总是从磁盘中提取原子元组,还是仅提取在选择操作中请求的那些列? 如果它总是拉一个元组,则I / O开销是相同的。 同时,如果它拉出一个元组,从元组中剥离请求的列可能会占用内存。 因此,在

  • 问题内容: 我创建了在9个表上使用INNER JOIN的SQL命令,无论如何,此命令将花费很长时间(超过五分钟)。所以我的同事建议我将INNER JOIN更改为LEFT JOIN,因为尽管我知道,但LEFT JOIN的性能更好。更改后,查询速度得到了显着提高。 我想知道为什么LEFT JOIN比INNER JOIN快? 我的SQL命令看起来象下面这样: 等 更新: 这是我的架构的简要介绍。 问题答

  • 问题内容: 编辑: 直到这里,我得到适当的4行,但它们都是相同的结果(我知道我需要4行,但是有不同的结果) 我的问题是,如何仅通过LotteryOfferId来通过多对多表检索所有彩票? 我要实现的是通过LotteryDrawDateId从彩票表中获取数据。 首先,我使用LotteryOfferId从中间表获取DrawDates,然后通过中间表获取drawDateIds以在LotteryDrawD

  • 问题内容: 我有一个查询来获取搜索结果,效果很好。 成功查询的示例: 从现在开始,我每个人都有一个以上的记录,这是我想要获得MAX值(最新ID)的地方。 我尝试了许多不同的查询,但始终收到错误消息 _ ,在非对象上调用成员函数rowCount()。_ 我了解该错误的含义,但我无法弄清楚该错误的出处和总体上的错误。 我未成功尝试的示例: 我在这里想念什么?有什么帮助吗? 问题答案: 这是你的条款:

  • 问题内容: 产生5行(5个数组),是一行中唯一的唯一字段。重复( 在这里 重复3次。 )我如何摆脱这些重复? 编辑: 我想要和所有为每个饮料。 问题答案: 您在这里所做的称为a (尽管您是隐式执行的,因为您是从多个表中选择的)。这意味着,如果您未在WHERE子句中放置任何条件,则您将拥有这些表的 所有组合 。仅根据您的条件,您才可以将联接限制为饮料ID匹配的行。 但是,如果有X张包含此特定Drin

  • 问题内容: 我想根据URL字符串选择一些ID,但对于我的代码,它仅显示第一个。如果我写手册的ID是伟大的。 我有这样的网址http://www.mydomain.com/myfile.php?theurl=1,2,3,4,5(ids) 现在在myfile.php中,我有sql连接,并且: 如果我使用这个: 我得到正确的结果。现在,如果我使用下面的代码,它将无法正常工作: 有什么建议? 问题答案: