MySql数据库多个大表响应慢

标签 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 个表时,您建议我做什么才能从数据库获得快速响应。

最佳答案

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

关于MySql数据库多个大表响应慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17281636/

相关文章:

Mysql:相同的查询,相同数量的结果行,没有连接,慢 10 倍?

python - Django 预取与最大值过滤器相关

php - 从具有关系的多个表中选择数据

php - Laravel 获取所有带条件的子节点数

mysql - 列中两种不同的日期类型

node.js - 如何使用 RethinkDB 耗尽机器资源?

php - MySQL 事务和 USE `database name` 语句

java - 如何检查模式是否由 <jdbc :embedded-database> tag 创建

mysql - 从 3 个表中选择行