0

我是使用 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 workbench 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 个表时,我可以做些什么来从数据库中获得快速响应。

4

1 回答 1

1

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

于 2013-06-24T17:48:05.800 回答