Mysql 如何划分这个表
这是我的桌子Mysql 如何划分这个表,mysql,Mysql,这是我的桌子 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
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;
3150236行,MYISAM,数据大小:255.1MB,索引大小:209.5MB,股票代码:1468
我有两种经常使用的查询类型
1从结果中选择COL,其中COL的库存日期为“2011-08-06”
没问题,很快
2从结果中选择COL,其中stock代码='1234'按stock日期描述的订单限额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行,并将结果发送到图表软件。
但是对于每个不同的股票代码,这个查询在第一次运行时大约需要17秒
如何使它更快?我正在考虑对这个表进行分区,但我真的不知道怎么做,是按日期还是按股票代码
如果使用Stock_代码进行分区,我相信它会加快查询2的速度,那么查询1呢
谢谢
编辑
我试图添加一个指数股票代码,
这个查询速度更快
从results\u stock\u all中选择cols,其中stock\u Code='1234'ORDER BY stock\u 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
但当我尝试在较小的结果集上运行时
mysql>设置会话查询\缓存\类型=0
mysql>select*from results_stock_all ignore indexstock_code其中stock_code='1234'order by stock_date desc;
设置为100行0.00秒
mysql>选择*从结果\u股票\u全部忽略索引股票\u代码\u股票\u日期,其中
库存代码='1234'按库存日期描述的订单限额100;
设置为100行0.02秒
我相信使用where比使用文件排序更快。索引用于where,但不用于顺序。因此,您只需为股票代码添加索引:
alter table results_stock_all add index `Stock_Code` (`Stock_Code`);
这将使您的查询更快。索引用于WHERE,但不用于ORDER。因此,您只需为股票代码添加索引:
alter table results_stock_all add index `Stock_Code` (`Stock_Code`);
这将使您的查询更快。您是否没有足够的可用RAM来容纳此表及其索引?排序缓冲区是否足够大以容纳结果集?除了对数据进行分区,你还可以做很多事情。我认为这还不够,如果我在共享主机上运行它,如何优化它?Ehrm,你不在共享主机上运行这种事情,这就是为什么。获取一个VPS。我认为表分区可以帮助加快查询速度。您是否没有足够的可用RAM来容纳这个表及其索引?排序缓冲区是否足够大以容纳结果集?除了对数据进行分区,你还可以做很多事情。我认为这还不够,如果我在共享主机上运行它,如何优化它?Ehrm,你不在共享主机上运行这种事情,这就是为什么。获取VPS。我认为表分区有助于加快查询速度。