hi,
i have certain tables for products, time and the market data the structures of which are shown below.
CREATE TABLE product ( id mediumint( 11 ) NOT NULL auto_increment ,
code int( 11 ) NOT NULL ,
name varchar( 150 ) NOT NULL ,
brand_name varchar( 200 ) NOT NULL ,
start_date date default NULL ,
end_date date default NULL ,
code1 varchar( 45 ) NOT NULL ,
brand_name2 varchar( 45 ) NOT NULL ,
PRIMARY KEY ( id ) ,
KEY brand_name ( brand_name ) ) ENGINE = MyISAM DEFAULT CHARSET = latin1 ROW_FORMAT = COMPACT;
CREATE TABLE time (
id int( 11 ) NOT NULL AUTO_INCREMENT ,
date date NOT NULL ,
month int( 9 ) default NULL ,
year int( 4 ) default NULL ,
PRIMARY KEY ( id ) ,
KEY month ( month ) ,
KEY year ( year )
) ENGINE = MYISAM DEFAULT CHARSET = latin1 ROW_FORMAT = COMPACT;
CREATE TABLE mkt_data ( id int( 11 ) NOT NULL auto_increment ,
time_id int( 11 ) NOT NULL ,
brand_id int( 11 ) NOT NULL ,
buy_qty bigint( 20 ) NOT NULL ,
buy_value bigint( 20 ) NOT NULL ,
sold_qty bigint( 20 ) NOT NULL ,
sold_value bigint( 20 ) NOT NULL ,
PRIMARY KEY ( id ) ,
KEY time_id ( time_id , brand_id ) ,
KEY time_id_2 ( time_id ) ,
KEY brand_id ( brand_id ) ,
) ENGINE = MyISAM DEFAULT CHARSET = latin1 ROW_FORMAT = COMPACT;
Now i have performance issues when i run a query which joins all these 3 tables.
SELECT product.code, SUM(mkt_data.buy_value) FROM mkt_data, time, product WHERE time.id=mkt_data.time_id AND product.id=mkt_data.brand_id AND (time.year=2009 AND time.month<=8) GROUP BY product.code ORDER BY product.code
The problem with this query is that its very slow.
it takes almost 7 s to execute. Also it causes the use of filesort and temporary.
id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
1 	SIMPLE 	product 	ALL 	PRIMARY 	NULL 	NULL 	NULL 	102 	Using temporary; Using filesort
could anyone pls help me out as to how i can reduce the timing since the table size is also very less ( in a few thousands).
its really very important to me as i am not able to figure out how to move ahead with this?