On 8/31/06, Brent Baisley <[EMAIL PROTECTED]> wrote:
How about posting the results of:
EXPLAIN SELECT products
LEFT JOIN items ON products.product_id = items.product_id
WHERE items.product_id IS NULL;

+----+-------------+----------+------+---------------+------+---------+------+--------+-------------------------+
| id | select_type | table    | type | possible_keys | key  | key_len
| ref  | rows   | Extra                   |
+----+-------------+----------+------+---------------+------+---------+------+--------+-------------------------+
| 1  | SIMPLE      | products | ALL  |               |      |
|      | 89447  |                         |
| 1  | SIMPLE      | items    | ALL  | PRICE_INFO    |      |
|      | 123223 | Using where; Not exists |
+----+-------------+----------+------+---------------+------+---------+------+--------+-------------------------+

As you can see I have an index (UNIQUE) set that I use for an on
INSERT... ON DUPLICATE method while updating the prices every morning,
is this the messy part?

Your query looks fine to me. 6 hours is a very long time for tables that small. 
Are these MyISAM or InnoDB?

They are both MyISAM, with no other options changed from default.


----- Original Message -----
From: "Kim Christensen" <[EMAIL PROTECTED]>
To: "MySQL List" <mysql@lists.mysql.com>
Sent: Thursday, August 31, 2006 5:12 AM
Subject: Insane execution time for JOIN query


> Hey list;
>
> I posted this message under an earlier thread which touched the same
> subject - but I realized my case could be slightly different, thus
> posting a new thread here. Sorry for any inconvenience.
>
> I have two tables, one of which is a list over products which all have
> unique product id's (product_id). The other table, items, is a list
> over the products' corresponding prices and stock info; one row per
> each one of our supplier that has the item.
>
> Now, each night I run a query which removes all rows from the "items"
> table which haven't been updated in the last 24 hours. This works just
> fine, so here's my actual problem:
>
> Every now and then, all rows for a specific product in the "items"
> table gets removed after the nightly update, and I'm working on a
> query which removes all rows in the "products" table that doesn't have
> any corresponding rows (matched with product_id) in the "items" table.
>
> The culpr... ehrm, query:
>
> DELETE products FROM products
> LEFT JOIN items ON products.product_id = items.product_id
> WHERE items.product_id IS NULL;
>
> Now, my query has been running for 6 hours straight, and it's marked
> as "Sending data" in the process list. Any ideas?
>
> "products" has ~113.500 records while "items" has ~123.439.
>
> Table descriptions:
>
> PRODUCTS
> 
+------------------------+------------------+------+-----+---------+----------------+
> | Field                  | Type             | Null | Key | Default |
> Extra          |
> 
+------------------------+------------------+------+-----+---------+----------------+
> | product_id             | int(10) unsigned | NO   | PRI |         |
> auto_increment |
> | product_retail_id      | varchar(255)     | NO   | MUL |         |
>            |
> | manufactor_id          | int(10) unsigned | NO   |     | 0       |
>            |
> | product_description    | varchar(255)     | NO   |     |         |
>            |
> | product_comment        | text             | NO   |     |         |
>            |
> | product_internal_id    | varchar(255)     | NO   |     |         |
>            |
> | product_price1_percent | float            | NO   |     | 0       |
>            |
> | product_price2_percent | float            | NO   |     | 0       |
>            |
> | product_price3_percent | float            | NO   |     | 0       |
>            |
> | product_price1_amount  | float            | NO   |     | 0       |
>            |
> | product_price2_amount  | float            | NO   |     | 0       |
>            |
> | product_price3_amount  | float            | NO   |     | 0       |
>            |
> | product_added          | int(10) unsigned | NO   |     | 0       |
>            |
> | product_url            | varchar(255)     | NO   |     |         |
>            |
> | product_ean            | varchar(13)      | NO   |     |         |
>            |
> 
+------------------------+------------------+------+-----+---------+----------------+
>
> ITEMS:
> 
+------------------+------------------+------+-----+---------+----------------+
> | Field            | Type             | Null | Key | Default | Extra          
|
> 
+------------------+------------------+------+-----+---------+----------------+
> | item_id          | int(10) unsigned | NO   | PRI |         | auto_increment 
|
> | product_id       | varchar(45)      | NO   | MUL | 0       |                
|
> | item_price       | float            | NO   |     | 0       |                
|
> | item_stock       | int(11)          | NO   |     | 0       |                
|
> | item_incoming    | varchar(45)      | NO   |     |         |                
|
> | item_updated     | int(10) unsigned | NO   |     | 0       |                
|
> | item_url         | varchar(255)     | NO   |     |         |                
|
> | supplier_id      | int(10) unsigned | NO   |     | 0       |                
|
> | item_internal_id | varchar(45)      | NO   | MUL |         |                
|
> | item_description | varchar(255)     | NO   |     |         |                
|
> | item_weight      | float            | NO   |     | 0       |                
|
> 
+------------------+------------------+------+-----+---------+----------------+
>
> Best regards
> --
> Kim Christensen
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]
>



--
Kim Christensen

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to