Внутреннее соединение SQL: БД застряла

Я задал этот вопрос несколько дней назад, но не объяснил, чего именно я хочу. Я снова задаю вопрос, сформулированный лучше: Чтобы прояснить мою проблему, я добавил новую информацию:

У меня есть БД MySQL с таблицами MyISAM. Две соответствующие таблицы:

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

(для полной информации о таблицах см. снимок экрана продуктов (снимок экрана) и снимок экрана orders_products (снимок экрана))

Теперь я хочу следующее: - Получить все заказы, которые заказали продукты с Manufacturer_id = 1. И название продукта продукта этого заказа (с Manufacturer_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 сервер. Где ошибка?


person SurfingCat    schedule 20.03.2010    source источник
comment
Маленькие цветные ромбики ничего не значат для тех, кто не знаком с этим инструментом. Было бы лучше показать точные операторы DDL.   -  person Ignacio Vazquez-Abrams    schedule 20.03.2010


Ответы (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 

У вас были как неявные, так и явные соединения в таблице продуктов (обратите внимание, чтобы никогда больше не использовать неявный синтаксис соединения, это очень плохая практика программирования), и, глядя на код, я подозреваю, что вы получали перекрестное соединение.

person HLGEM    schedule 20.03.2010
comment
Большое Вам спасибо. Вот и все. знак равно - person SurfingCat; 20.03.2010

Если у вас нет индексов, то при выборе может быть выполнено много сканирований таблиц.

Возможно, вы возвращаете очень большой набор результатов, который может заполнить временную область, что может объяснить застревание.

person Shiraz Bhaiji    schedule 20.03.2010