我有很多客户创建了很多票,这些票等待结果,这些功能类似于宾果游戏,一旦你知道结果就会创建很多票(大约20000)等待最终结果,我有一个程序验证,票证,并询问票证是否等于结果,然后票证被标记为赢家或输家,问题是,当记录很少,一切正常,但现在需要太久更新那些20000票,最糟糕的是我连续多次发生事件,然后例如我应该更新50000~10000条记录,这可能需要几个小时。有没有办法在块中更新这个?
门票的结构就像这样
CREATE TABLE `Ticket` (
`ClientID` int(10) NOT NULL,
`TicketID` int(15) NOT NULL AUTO_INCREMENT,
`BetAmmount` int(20) NOT NULL,
`Gain` int(20) DEFAULT NULL,
`Status` int(15) NOT NULL COMMENT '1=Simple ;2=Combinado',
`Date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`Choice`varchar(20) NOT NULL,
`EventID`int(10) NOT NULL,
PRIMARY KEY (`TicketID`),
KEY `idx_ClientID` (`ClientID`),
KEY `idx_status` (`Status`),
KEY `idx_EventID` (`EventID`),
KEY `idx_Date` (`Date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=14455815 ;
结果表
CREATE TABLE `Event` (
`EventID` int(10) NOT NULL,
`Result` varchar(25) NOT NULL,
`Date` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`EventID`),
KEY `idx_Date` (`Date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
然后我的程序(使用c#开发)运行,如果结果正确,则每张票询问票据
首先我加载具有相同eventID的所有票证,然后将其存储在datagridview中,然后我暂停0.1秒,然后我加载此事件的结果,并且我每行运行一行,并且我更新记录
在C#程序中
//MYSQL Connection
DbTicketsRecords=mysql.select('select * from Ticket where idEvent="xxxx"');
dgvTickets.DataSource = DbTicketsRecords;
DbResult=mysql.select('select * from Event where idEvent="xxxx"');
Thread.sleep(100);
foreach(DataGridViewRow row in dgvTickets.Rows)
{
string Choice = row.Cells[6].Value.ToString();
string TicketID=row.Cells[1].Value.ToString();
if(Choice== DbResult.fields('Result'){
DbTicketsRecords=mysql.select("update Ticket set status='win' where TicketID='" + TicketID+"'");
}else{
DbTicketsRecords=mysql.select("update Ticket set status='Loss' where TicketID='" +TicketID+"'");
}
}
注意:程序执行一些额外的操作,但在综合中,这些是主要功能。
然后我的问题是,我可以更高效地完成这项操作,我可以做些什么来改善这个过程?