Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何划分这个表_Mysql - Fatal编程技术网

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。我认为表分区有助于加快查询速度。