1

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

我有一个带有 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, ...

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

现在我想要的是: - 获取所有订购了 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卡住了。错误在哪里?

4

2 回答 2

2
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 表上有隐式和显式连接(请注意不要再使用隐式连接语法,这是一个非常糟糕的编程习惯)并且查看代码,我怀疑你得到了一个交叉连接。

于 2010-03-20T20:10:18.043 回答
1

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

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

于 2010-03-20T20:07:08.447 回答