【问题标题】:SQL Inner Join : DB stuckSQL 内部连接:数据库卡住
【发布时间】:2011-01-29 21:10:50
【问题描述】:

几天前我发布了这个问题,但我没有准确解释我想要什么。 我再次提出更好地表述的问题: 为了澄清我的问题,我添加了一些新信息:

我有一个带有 MyISAM 表的 MySQL 数据库。两个相关的表是:

* orders_products: orders_products_id, orders_id, product_id, product_name, product_price, product_name, product_model, final_price, ...
* products: products_id, manufacturers_id, ...

(有关表格的完整信息,请参阅产品截图 (Screenshot) 和订单产品截图 (Screenshot))

现在我想要的是: - 获取所有订购了 Manufacturer_id = 1 产品的订单。以及该订单产品的产品名称(制造商 ID = 1)。按订单分组。

到目前为止我所做的是:

SELECT
op.orders_id,
p.products_id,
op.products_name,
op.products_price,
op.products_quantity
FROM orders_products op , products p 
INNER JOIN products
ON op.products_id = p.products_id
WHERE p.manufacturers_id = 1 AND
p.orders_id > 10000

p.orders_id > 10000 用于测试仅获得几个 order_id。但是,即使它有效,该查询也需要很长时间才能执行。两次sql server卡住了。错误在哪里?

【问题讨论】:

  • 小彩钻对于不了解该工具的人来说毫无意义。最好显示确切的 DDL 语句。

标签: sql mysql join myisam


【解决方案1】:
SELECT 
op.orders_id, 
p.products_id, 
op.products_name, 
op.products_price, 
op.products_quantity 
FROM orders_products op   
INNER JOIN products p
ON op.products_id = p.products_id 
WHERE p.manufacturers_id = 1 AND 
p.orders_id > 10000 

你在 products 表上有隐式和显式连接(请注意不要再使用隐式连接语法,这是一种非常糟糕的编程习惯)并且查看代码,我怀疑你得到了交叉连接。

【讨论】:

  • 非常感谢。而已。 =)
【解决方案2】:

如果您没有任何索引,则选择可能会生成许多表扫描。

可能是您返回的结果集非常大,可能会填满临时区域,这可能是卡住的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多