求高手帮忙看一下联表查询,如何优化,谢谢!

2016-08-03 08:38:54 +08:00
 wuliao8

A 表待更新,有 20 万数据,无索引; B 表,有 70 万数据,无索引,ID 有重复项,查找的值一样;

UPDATE test AS A, ( SELECT ID,NAME,FILE,DIS FROM users GROUP BY(ID)) AS B SET A.dizhi = B.name,A.FILE= B.FILE,A.DIS = B.DIS WHERE A.ID = B.ID

2908 次点击
所在节点    MySQL
17 条回复
wuliao8
2016-08-03 09:13:11 +08:00
这个两种表的查询请问有什么高效的办法么? Mysql5.6
huixia0010
2016-08-03 09:18:08 +08:00
无索引- -主键呢,这种奇葩数据库,服
nightspirit
2016-08-03 09:20:54 +08:00
这是生产环境还是什么?应用场景是什么?
wuliao8
2016-08-03 09:30:05 +08:00
@nightspirit 只是本机运行,存储数据,更新数据
wuliao8
2016-08-03 09:30:52 +08:00
@huixia0010 无索引,也无主键, google 说有索引的 UPDATE 更慢
li24361
2016-08-03 09:55:49 +08:00
@wuliao8 分情况吧,如果是海量数据高速插入,更新,索引确实会更慢,但 70w ,这么点,加上索引,明显能够提升 A.ID = B.ID 效率
nightspirit
2016-08-03 10:27:02 +08:00
@wuliao8 有索引慢是因为,写入数据会构造索引,所以慢, SELECT ID,NAME,FILE,DIS FROM users GROUP BY(ID)这个子句这样写时用不到索引的,所以这个场景索引没啥用,你现在这个效率低也主要是这个子句,如果加索引可以加在 id 上,然后分步查询利用 id , id>某常数,这样循环更新表,不过你只是在本地的化,貌似也不需要什么效率问题,如果是生产环境,就可以考虑在本地做一部分,然后在上线时候,增量生产的那一部分,可以利用 read lock 。
y10n
2016-08-03 10:30:57 +08:00
A 表 主键加索引
B 表 普通索引
会不会好点?
luluuulu4848
2016-08-03 10:38:25 +08:00
其实有时候拆开写能快点
表大的时候产生的笛卡尔积会很大
数据量如果很大的时候
SELECT ID,NAME,FILE,DIS FROM users GROUP BY(ID) 可以先查出来
然后 batchUpdate A 表
反而会快点
saintatgod
2016-08-03 11:21:33 +08:00
赞成 @luluuulu4848 的看法。
同时考虑加上索引,这个数据量,性能影响不大
wuliao8
2016-08-03 11:34:34 +08:00
@nightspirit 话说创建临时表更快些,还没实践。
现在这个语句 update4000 条都花了半个多小时,还没结束,不知道要多久
wuliao8
2016-08-03 11:37:56 +08:00
@luluuulu4848 初学 mysql , batchUpdate 是什么东东?
wander2008
2016-08-03 11:42:17 +08:00
explain 看一下 ok ?话说干嘛不让代码去跑
nightspirit
2016-08-03 13:57:21 +08:00
@wuliao8 没可能这么慢的,你是写的脚本更新的,还是直接执行的 sql 语句额?
luluuulu4848
2016-08-03 17:04:36 +08:00
@wuliao8 批量更新 一次提交事务
wuliao8
2016-08-03 17:16:03 +08:00
@nightspirit 直接执行的啊 sql 语句啊
dishuibaby
2016-08-03 17:54:24 +08:00
建议加上索引。 70W 的数据瞬间索引就加上了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/296711

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX