作者stevekevin10 (hippo泡)
看板Soft_Job
标题[请益] 资料库join後count速度问题
时间Sun May 8 16:47:27 2016
抱歉又来请益个资料库问题m_ _m
需要join 500万 跟 3万笔的表格
根据筛选条件後再根据後者的栏位做count
但现在下完query後都会卡住
请问该如何是好
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.136.97.130
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1462697249.A.497.html
1F:推 abc0922001: 弱弱问一下,资料库有建立索引吗05/08 16:53
2F:→ stevekevin10: 有05/08 16:53
3F:推 sivid: 能不能搬到cloud上面 scale up?05/08 17:03
目前没有cloud能用。。
※ 编辑: stevekevin10 (114.136.97.130), 05/08/2016 17:03:49
4F:推 longlongint: 可以先用小笔测试资料来估计 500万join3万会是几笔吗05/08 17:11
5F:→ ga013077: 500万的能先下条件缩小范围??05/08 17:11
6F:推 andyjon: 该用hash join 看看05/08 17:13
好 我试试看以前没用过m_ _m
7F:推 brucetu: 3万笔的那张表 , 先筛过再来join?05/08 17:34
是要join完後再筛@@
8F:推 alog: 以前用过两张数百万笔的资料做join 结果性能悲剧05/08 17:37
9F:→ alog: 为了解决这个问题把整套db放到ram disk05/08 17:37
10F:→ alog: 结果还是跑了一整天没有结果05/08 17:38
11F:→ alog: 调了db各种参数还是没用05/08 17:38
QQ
※ 编辑: stevekevin10 (114.136.97.130), 05/08/2016 17:41:11
12F:→ alog: 後来我就异想天开 想说分批查询试试 就把两张表的资料用LIMI 05/08 17:40
13F:→ alog: T 先控制住范围 05/08 17:40
14F:→ alog: 然後分几次查询 大概一次查询只花了半分钟 05/08 17:41
15F:→ alog: 当天干了要死XD 05/08 17:41
16F:→ ian90911: 可以检查是不是有开多线程搜寻? 05/08 17:42
17F:推 gn01838335: Union不同条件的select 05/08 17:56
18F:→ yyc1217: 可以用explain看看 05/08 17:59
19F:→ yyc1217: 还是想看看query 也许会变成500万*3万个再筛选的结果 05/08 18:00
20F:→ brucetu: 原本查询长什麽样子 为什麽一定要join完再筛@@ 05/08 18:18
21F:推 yourinfo: 问的太龙统了,简单说就是先处理500万,再join 05/08 21:19
22F:→ yourinfo: 为什麽一定要先join才能查!? 05/08 21:20
23F:推 sing10407: 太笼统了 sql贴出来才知道 05/08 21:23
24F:推 et69523820: 我的作法是 都不join 单独读取出500万放阵列 单独读取 05/08 21:28
25F:→ et69523820: 3万笔 放阵列 用key当元素 马上就可以指到你要的资料 05/08 21:30
26F:→ et69523820: 这样总共读取出503万笔资料 大概几分钟就可以跑完 05/08 21:33
27F:推 et69523820: join会有乘积效应 所以我基本上都不会用join都改用阵 05/08 21:39
28F:→ et69523820: 列处理 05/08 21:39
29F:推 kiwatami: 我猜你的资料库启动後没有把资料读到记忆体内 05/08 21:56
30F:→ kiwatami: 而是用硬碟在跑才会这麽慢 然後你建的索引 05/08 21:56
31F:→ kiwatami: 跟你 join 的栏位有一样吗 05/08 21:56
32F:→ kiwatami: 把 schema 跟 SQL 都放上来比较好判断 05/08 21:56
33F:→ kiwatami: 500万 * 3万正常应该不至於会卡住 05/08 21:56
34F:推 et69523820: 要看3万对应出来有几笔 如果对应出来有1000笔 05/08 22:13
35F:→ et69523820: 500万 * 1000笔 = 50亿 2000笔就 100亿... 05/08 22:14
36F:→ alan3100: 大哉问 你这样问从头到尾都有东西可以讲 等於没讲 05/08 22:16
37F:推 abc0922001: 希望index的栏位有在查询的栏位中XDD 05/08 22:29
38F:推 sorianotw: 即便放到ram里面,可以思考看看这样的资源成本是否过 05/09 09:11
39F:→ sorianotw: 高 05/09 09:11
40F:→ sorianotw: 效能不是只有速度而已,资源耗用多少会影响整个系统的 05/09 09:13
41F:→ sorianotw: 吞吐量,这也是需要去思考的议题 05/09 09:13
42F:推 sorianotw: 蛮多使用join的情景,都可以拆分成数个simple select, 05/09 09:15
43F:→ sorianotw: 资料量大的状况下, 速度反而更快,且资源耗用量更小 05/09 09:15
44F:推 kiwatami: 启动时没读 搜寻後也是会存进去 只是先後顺序而已 05/09 13:34
45F:推 iamshiao: 推 05/10 19:30