MySql数据库缓慢响应多个大表

时间:2013-06-24 17:41:53

标签: mysql database-performance multiple-tables large-data-volumes

我是使用Mysql的新手,我在尝试读取数据库的大表时遇到了问题。我创建了下一个数据库:

CREATE DATABASE `chamber_master_db` /*!40100 DEFAULT CHARACTER SET utf8 */

有80个表格如下:

CREATE TABLE `chamber_el_801_server_tb` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Chamber_id` varchar(20) NOT NULL DEFAULT 'NA',
  `Date` date NOT NULL,
  `Time` varchar(20) NOT NULL DEFAULT 'NA',
  `Status` varchar(20) NOT NULL DEFAULT 'NA',
  `EWR` varchar(20) NOT NULL DEFAULT 'NA',
  `Program` varchar(30) NOT NULL DEFAULT 'NA',
  `TestLeg` varchar(20) NOT NULL DEFAULT 'NA',
  `Test` varchar(20) NOT NULL DEFAULT 'NA',
  `Temperature` double NOT NULL DEFAULT '0',
  `Humidity` double NOT NULL DEFAULT '0',
  `Channel3` double NOT NULL DEFAULT '0',
  `Setpoint1` double NOT NULL DEFAULT '0',
  `Setpoint2` double NOT NULL DEFAULT '0',
  `Setpoint3` double NOT NULL DEFAULT '0',
  `ChamberStatus` int(11) NOT NULL DEFAULT '0',
  `TestEquipment` varchar(20) NOT NULL DEFAULT 'NA',
  `LoadRack` varchar(20) NOT NULL DEFAULT 'NA',
  PRIMARY KEY (`id`),
  KEY `index2` (`Date`)
) ENGINE=InnoDB AUTO_INCREMENT=44754 DEFAULT CHARSET=utf8

我有两个索引,一个是'id',它是记录的顺序条目号,另一个是日期,因为我将按日期查询表(我把这些索引放在一边因为我读了那个使用索引可以加快查询过程。)

数据库的80个表每分钟都会获得一条新记录,因此几周后表格非常大。

当我在一个表的一段时间内查询一组记录时,数据库响应很快。问题是当我查询数据库中所有表的一段时间的一组记录时(此查询用于我的Web应用程序的统计目的),即使从mysql工作台5.2.46进行查询数据库正在运行。

我还读过数据库使用的引擎可能会影响数据库,但我不确定哪种引擎最适合这个应用程序。

我正在使用的查询是下一个:

commandLine = "SELECT count(*) FROM " + table + " WHERE Status = '" + "Run" + "' AND Date BETWEEN '" + startdate + "' AND '" + enddate + "'";
_mysqlcommand.CommandText = commandLine; 
Run= Convert.ToDouble(_mysqlcommand.ExecuteScalar()) / totalrows * 100;

对于每个表执行此查询5次以便知道不同状态的行数,然后在数据库中的80个表的循环内重复此操作,这就是它需要一分钟的时间到目前为止。

然后问题是,在同一例程中查询所有80个表时,您建议我可以做些什么来从数据库中获得快速响应。

1 个答案:

答案 0 :(得分:1)

对于您正在使用的查询,您应该在Status + Date上有一个复合索引。您的部分问题是,由于状态不是索引的一部分,因此必须执行全表扫描以过滤状态。给它一个镜头,看它是否表现更好。