我希望有人可以提供建议,但我在下面的连接声明中经历了很长的处理时间,并希望得到一些改进性能的建议。两个表都有数百万条记录,我有列索引,但是仍然需要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
因此表x有66m记录,表y有44m,但是使用PROCESSING_FLAG它不会将所有66m记录连接到44m记录,只有一个子集。我在a.Parent_Id,b.ID,a.Load_ID,b.LoadID,a.Room_ID,b.ConID,a.Processing_Flag和b.Processing_Flag上有列索引。两个表都使用MYISAM,而我使用的是MySQL 5.6.17。
我是否可以做些什么来提高本声明的表现?我正在考虑将关键缓冲区增加到6G作为第一步。
答案 0 :(得分:-1)
MYISAM最适合选择操作。如果您的数据库非常重,用户也很好。更新操作需要时间。
尝试使用索引列进行连接。加入将表现良好。
与你的mysql服务器通信管理员告诉他/她增加 join_buffer_size
join_buffer_size服务器变量,负责为不执行的连接分配内存 加入索引列
我希望这会对你有所帮助。