Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql连接性能非常慢_Mysql_Performance - Fatal编程技术网

Mysql连接性能非常慢

Mysql连接性能非常慢,mysql,performance,Mysql,Performance,我希望有人能提供建议,但我在下面的join语句中经历了很长的处理时间,我希望得到一些关于改进性能的建议。这两个表中的每个表都有数百万条记录,我在其中设置了列索引,但运行此联接仍需要70多个小时 update <table x> a left join <table y> b on a.PARENT_ID=b.ID and a.LOAD_ID=b.LOADID set a.DATETIME=str_to_date(b.`DateTim

我希望有人能提供建议,但我在下面的join语句中经历了很长的处理时间,我希望得到一些关于改进性能的建议。这两个表中的每个表都有数百万条记录,我在其中设置了列索引,但运行此联接仍需要70多个小时

update <table x> a
left join <table y> b
on a.PARENT_ID=b.ID and a.LOAD_ID=b.LOADID                    
set a.DATETIME=str_to_date(b.`DateTime`, '%m/%d/%Y %H:%i:%s'), a.ROOM_ID=b.ConID, a.STATUS='Exited'
where a.PARENT_ID=b.ID and a.LOAD_ID=b.LOADID and a.PROCESSING_FLAG = 0 and b.PROCESSING_FLAG = 0
更新a
左连接b
在a.PARENT\u ID=b.ID和a.LOAD\u ID=b.LOADID上
将a.DATETIME=str设置为日期(b.`DATETIME`、'%m/%d/%Y%H:%i:%s')、a.ROOM\u ID=b.ConID、a.STATUS='Exited'
其中a.PARENT_ID=b.ID和a.LOAD_ID=b.LOADID和a.PROCESSING_FLAG=0和b.PROCESSING_FLAG=0
因此,表x有66m条记录,表y有44m条记录,但使用PROCESSING_标志,它不会将所有66m条记录连接到44m条记录,而只是一个子集。我在a.Parent\u Id、b.Id、a.Load\u Id、b.LoadID、a.Room\u Id、b.ConID、a.Processing\u标志和b.Processing\u标志上有列索引。两个表都使用MYISAM,我使用的是MySQL 5.6.17


我能做些什么来提高这个声明的性能吗?作为第一步,我考虑将密钥缓冲区增加到6G。

MYISAM是选择操作的最佳选择。如果您的数据库非常繁重,用户也很好。更新操作需要时间

尝试使用索引列进行联接。加入将表现良好

与mysql服务器管理员沟通,告诉他/她增加加入缓冲区大小

join\u buffer\u size服务器变量,负责为不执行的联接分配内存 与索引列联接


我希望这对你有帮助

您是否尝试通过EXPLAIN运行它以查看它是否实际使用了您认为是的索引?PROCESSING_标志显然是0或1,因此它的基数是无用的-无论您是否对其进行索引,MySQL仍将遍历整个数据集以确定不需要某些记录。在该查询中,我看不到一个令人满意的有效索引使用标准。下一个愚蠢的事情是,您使用MyISAM是出于某种奇怪的原因,所以您受到I/O限制,因为RAM很可能不用于存储工作数据集的热拷贝。我怀疑如果不使用更高级的存储引擎(可以有效地利用RAM),这是否可以进行优化。我还没有这样做,因为语句仍在运行,并且表被锁定。是的,处理标志被设置为1或0。我的想法是在卡盘中获取数据,然后对每个卡盘进行处理。所以我想要一种只处理新数据而不处理旧数据的方法。使用MYISAM是因为我在某个地方读到它更快。我不使用Innodb,因为这不是一个应用程序,所以不需要主键和外键,并且需要符合ACID的要求。我倾向于获取非规范化数据。@NB什么是错误信息。你能告诉我TruthMySam可以更好地使用少量只读用户,但仅此而已。它也非常不耐碰撞,所以你真的不想在生产中使用它。