0

我是使用Mysql的新手,在嘗試讀取大型數據庫表時出現問題。我已創建的下一個數據的基礎上: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個表,這是迄今爲止需要花費1分鐘的時間。

然後問題是,當在同一例程中查詢所有80個表時,我可以做什麼以獲得數據庫的快速響應。

+0

您可能想要將一個索引添加到「狀態」字段,然後再次測量。 – Bjoern

回答

1

對於您正在使用的查詢,您應該在狀態+日期上有複合索引。部分問題是,由於狀態不是索引的一部分,因此必須執行全表掃描才能過濾狀態。給一個鏡頭,看看它是否表現更好。