这是我的表
CREATE TABLE IF NOT EXISTS `results_stock_all` (
`Result_Id` varchar(50) NOT NULL,
`Stock_Date` date NOT NULL,
`Stock_Code` varchar(20) NOT NULL,
`Prev_Close` float(10,3) NOT NULL DEFAULT '0.000',
`Open` float(10,3) NOT NULL DEFAULT '0.000',
`Close` float(10,3) NOT NULL DEFAULT '0.000',
`High` float(10,3) NOT NULL DEFAULT '0.000',
`Low` float(10,3) NOT NULL DEFAULT '0.000',
`Volume` int(11) NOT NULL DEFAULT '0',
`Change` float(10,3) NOT NULL DEFAULT '0.000',
`Change_Percent` float(10,3) NOT NULL
PRIMARY KEY (`Result_Id`),
KEY `Stock_Date` (`Stock_Date`),
KEY `Stock_Code_Stock_Date` (`Stock_Code`,`Stock_Date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
3,150,236行,MYISAM,数据大小:255.1MB,索引大小:209.5MB,Stock_Code:1468
我有两种经常使用的查询,
1)SELECT cols FROM results_stock_all WHERE Stock_Date ='2011-08-06'ORDER BY cols;
(没问题,很快)
2)SELECT cols FROM results_stock_all WHERE Stock_Code ='1234'ORDER BY Stock_Date DESC LIMIT 3000;
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE results_stock_all ref Stock_Code_Stock_Date Stock_Code_Stock_Date 22 const 5173 Using where
我需要查询最新的3000行并将结果发送到图表软件。 但是,对于每个不同的Stock_Code,此查询在首次运行时大约需要17秒。
如何让它更快?我正在考虑对这个表进行分区,但我真的不知道怎么做,按Date或Stock_Code? p>
如果按Stock_Code分区,我相信会加快查询#2,那么查询#1
如何感谢。
我尝试添加索引Stock_Code
,
它在这个查询中更快
SELECT cols FROM results_stock_all WHERE Stock_Code ='1234'Order By Stock_Date DESC LIMIT 3000;
但是当我试图在较小的结果集上运行时,
的MySQL> set session query_cache_type = 0;
的MySQL> select * from results_stock_all ignore index(stock_code)where stock_code ='1234'order by stock_date desc; 100行(0.00秒)
的MySQL> select * from results_stock_all ignore index(stock_code_stock_date)where stock_code ='1234'按stock_date desc限制100的顺序; 100行(0.02秒)
我相信使用哪里比使用文件排序更快。
答案 0 :(得分:1)
索引用于WHERE,但不用于ORDER。因此,您只需为Stock_Code添加索引:
alter table results_stock_all add index `Stock_Code` (`Stock_Code`);
这可以让您的查询更快。