【发布时间】:2013-06-21 07:45:51
【问题描述】:
我是使用 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 个表时,您有什么建议可以从数据库中得到快速响应。
【问题讨论】:
-
您可能想为字段
Status添加索引,然后再次测量。
标签: mysql database-performance multiple-tables large-data-volumes