Hi,
Could someone please help me to get rid of "Using temporary; Using filesort"
from the following SQL statement?
SELECT a.document_id AS id, attr_name AS name, attr_value AS value, attr_order
AS ord FROM attributes a INNER JOIN status s ON (a.document_id = s.document_id)
WHERE update_flag = 2 order by a.document_id,attr_name,attr_order;
attributes table has 17,416,181 records and status table has 335,268 records.
For each document_id in status table, there will be many records in attributes
table.
The above query took around 762 seconds in the worst case.
For each excution there will be upto 5000 records returned from status table
with update_flag = 2 and around 300,000 records from attributes table.
# Query_time: 762 Lock_time: 0 Rows_sent: 262293 Rows_examined: 791879SELECT
a.document_id AS id, attr_name AS name, attr_value AS value, attr_order AS ord
FROM attributes a INNER JOIN status s ON (a.document_id = s.document_id) WHERE
update_flag = 2 order by a.document_id,attr_name,attr_order;
mysql> explain SELECT a.document_id AS id, attr_name AS name, attr_value AS
value, attr_order AS ord FROM attributes a INNER JOIN status s ON
(a.document_id = s.document_id) WHERE update_flag = 2 order by
a.document_id,attr_name,attr_order \G*************************** 1. row
*************************** id: 1 select_type: SIMPLE table:
s type: refpossible_keys: ix_status_documentid,ix_status_updateflag
key: ix_status_updateflag key_len: 2 ref: const
rows: 1 Extra: Using where; Using temporary; Using
filesort*************************** 2. row ***************************
id: 1 select_type: SIMPLE table: a type: refpossible_keys:
index_three,ix_attributes_documentid key: index_three key_len:
257 ref: jacobjitems.s.document_id rows: 52 Extra:2
rows in set (0.00 sec)
mysql> show create table attributes \G*************************** 1. row
*************************** Table: attributesCreate Table: CREATE TABLE
`attributes` ( `document_id` varchar(255) NOT NULL, `attr_name` varchar(64)
NOT NULL, `attr_value` varchar(4000) NOT NULL, `attr_order` smallint(6)
default NULL, `attr_include` tinyint(1) default '1', KEY `index_three`
(`document_id`,`attr_name`,`attr_order`), KEY `ix_attributes_documentid`
(`document_id`), KEY `ix_attributes_attr_name` (`attr_name`)) ENGINE=MyISAM
DEFAULT CHARSET=latin1
mysql> show create table status \G*************************** 1. row
*************************** Table: statusCreate Table: CREATE TABLE
`status` ( `document_id` varchar(255) NOT NULL, `update_flag` tinyint(4)
default '1', `collection_name` varchar(128) NOT NULL, KEY
`ix_status_documentid` (`document_id`), KEY `ix_status_updateflag`
(`update_flag`)) ENGINE=MyISAM DEFAULT CHARSET=latin11 row in set (0.00 sec)
Thanks in advance for your help !!!
-Jeesmon