
1 13192262269 OP 有没有老哥,给个好的思路?愁死我了 |
2 dangyuluo 2019-03-11 12:58:09 +08:00 你也不说数据库结构,有没有健可以利用,或者是根据什么进行查询。给不出建议。 |
3 dangyuluo 2019-03-11 12:58:22 +08:00 健 => 键 |
4 ilyh 2019-03-11 13:02:55 +08:00 百万怎么也称不上海量... 随便什么数据库都能 hold 住吧... |
5 kxjhlele 2019-03-11 13:04:34 +08:00 via Android 百万随便查询一下就出来了吧,数据量也不大 |
6 ysweics 2019-03-11 13:13:08 +08:00 要相信 oracle 的能力 |
7 13192262269 OP |
8 6ufq0VLZn0DDkL80 2019-03-11 13:17:09 +08:00 原来百万级就是海量了 起码定义下你说的高性能是多高吧 |
9 hellojinjie 2019-03-11 13:19:24 +08:00 你要说明你的查询要在多少时间内完成啊? 如果只要在十秒内完成的话,不是很简单的事情嘛? |
10 13192262269 OP @cholerae #8 部门要求是,秒查出来想要的几十万信息,我想问一下,如何做到 ,菜鸟一枚请教一下 |
11 13192262269 OP @hellojinjie #9 十秒内可以接受 |
12 thesharjah 2019-03-11 13:24:17 +08:00 直接写 sql 查就行了 10s,扫个全表够了 |
13 jingxyy 2019-03-11 13:26:00 +08:00 千万级只要索引建得合理也是妥妥的,用在 oltp 业务上都没啥问题,更合况你这听起来更像是 olap 业务,如果确实是 olap (比如制卡商一天查一次,不需要实时),那就更容易了,每天在旧表跑一遍过滤出结果放新表里,让查询请求查新表。 这个数据对于商业数据库来说真不算什么,你要不先用直接的思路试试,看看能不能达到要求,如果不能把问题说一下(比如用了 10 秒,你希望 1 秒以内,或者机器查不出来内存爆了之类的),具体的操作说一下(比如表的 schema,查询使用的 sql )大家才好帮你研究瓶颈在哪以及解决方案。 |
14 13192262269 OP @thesharjah #12 @jingxyy #13 我这边扫到 67 万就出现了 out of memory 已经设置最大内存 |
15 jingxyy 2019-03-11 13:32:08 +08:00 方便直接上代码么 关键字段脱个敏啥的 你现在说的完全没法定位问题= = |
16 blless 2019-03-11 14:57:26 +08:00 via Android 几十 W 数据是带宽跟 IO 问题了吧… |
17 JamesR 2019-03-11 15:02:02 +08:00 才区区百万级,搞笑,不行把数据导入到性能好的本机台式电脑上再处理。 |
18 no1xsyzy 2019-03-11 15:12:02 +08:00 百万级不是 Excel 都能处理? |
19 1762628386 2019-03-11 15:13:27 +08:00 没啥问题 不加索引都没问题 |
20 daozhihun 2019-03-11 15:16:11 +08:00 via Android 百万级直接关系数据库加索引就行了 |
21 0ZXYDDu796nVCFxq 2019-03-11 15:19:26 +08:00 via Android 千万级只能算小小小小小数据 |
22 smeraldo 2019-03-11 15:26:10 +08:00 @13192262269 java 导出 oom ?分批吧 |
23 iphper993 2019-03-11 15:34:32 +08:00 百万千万都是小数据啦 @13192262269 你把数据都查出来用代码处理吗?不能用条件过滤呀? |
24 opengps 2019-03-11 15:56:55 +08:00 via Android 数据量确实不算大,难在索引上,合理的索引,搭配 SSD 提高速度,应该够用 |
25 jadec0der 2019-03-11 16:01:51 +08:00 |
26 zarte 2019-03-11 16:29:06 +08:00 现在服务器上建索引试下,再来发帖求助。。。 |
27 Shynoob 2019-03-11 16:30:30 +08:00 百万级 如果固态的话 简单的索引 很快的 |
28 Navee 2019-03-11 16:35:20 +08:00 百万级 Mysql 处理起来小儿科 更不要谈 Oracle 了 |
29 sigup 2019-03-11 16:37:44 +08:00 百万行用 txt 读到内存里都能处理。。。 |
30 taaaang 2019-03-11 16:48:53 +08:00 固态硬盘, 索引, 你先跑一下试试再说 |
31 oneonesv 2019-03-11 16:52:59 +08:00 千万也不多啊 有个索引 10 秒足够 你一下全读内存肯定不够,追加写即可 |
32 lauix 2019-03-11 16:56:22 +08:00 建个索引 百万 跟玩一样。 |
33 Joyboo 2019-03-11 17:09:40 +08:00 百万。。我怀疑楼主少了一个“亿”字 |
34 mkeith 2019-03-11 17:41:37 +08:00 via iPhone 数据库 oom,还是你的程序啊? |
35 wmhx 2019-03-11 18:25:43 +08:00 你就不会写个 for 循环分 N 次么? |
36 wind3110991 2019-03-11 19:16:34 +08:00 上面有些回答真是要奔溃,很讨厌回答打个反问号,又不给实际解决方案和思路。。 ( 1 )要理解 Mysql 恰恰就是适合处理百 /千万级别以下的数据量; ( 2 )检查你的表是什么存储引擎的,是 InnobDB 还是 Mysiam。查询效率上 Mysiam 支持全文索引,查询时性能也要强于 InnobDB,如果你们的数据是一次性的导入,基本都是批量更新的话,可以使用 Mysiam。但是如果更新的比较频繁的话,且要使用事务时,考虑使用 InnobDB。 ( 3 )对于慢查询问题:show create table, 查看你表当前的索引,并且是否有主键。看你的情景,是要在百万中选出坏的,那么大致会有状态字段,看一下这个字段是否是作为单列索引存在于你的表中,如果没有,新建一个同样的表,加上索引,然后把数据拷贝过去,然后变更换表(千万不要在老表加索引,容易导致雪崩)。 ( 4 )上 10W 数据的表,如果有频繁删除和更新,一定要记得定期做表的优化,Mysiam 的表可以用 optimize,InnobDB 的表用 ALTER TABLE table_name ENGINE = Innodb。因为表在删除数据必然会在数据文件中造成不连续的空白空间,而当再次插入数据时,这些空白空间则会被利用起来,数据的存储位置会不连续,导致大量空间碎片。因此要定期做表优化。 ( 5 )查看 DB 机器机型和配置,是否性能不足是机器配置不够高导致的,数据库操作的性能主要瓶颈在于 I/O。 ( 6 )尽量给 DB 做主从和集群( MariaDB )。 以上就是能想到的最基本的几个点。 |
37 wind3110991 2019-03-11 19:18:22 +08:00 笔误。。是 MyISAM 不是 MySiam |
38 gz911122 2019-03-11 21:07:26 +08:00 @wind3110991 然而你说上面人回复的不对却没发现楼主根本不是 mysql...而是 oracle 百万级对于 oracle 随便搞也能在 10 秒内完成,单表 |
39 gz911122 2019-03-11 21:08:11 +08:00 @wind3110991 至于为什么不给解决方案与思路 因为楼主根本没说清楚自己的问题 |
40 jzmws 2019-03-11 21:25:23 +08:00 有什么好的 oracle 分表方案吗? 一个上亿的数据 |
42 wangluofansi 2019-03-11 22:47:02 +08:00 给你几个建议: out of memory 从两方面优化:①只查询所需字段而不是 select *,如 select card_info from card_table ;②分批,假设每次查询一万条记录,如果有自增 id,那么可以这样查询,select id, card_info from card_table where id > last_id limit 10000,其中 last_id 是上次查询出来的最大 id ; 索引方面优化:这个本来需要根据表结构和查询条件来,但是可以先简单粗暴地对 where 涉及字段建索引,explain 一下看看效果。 |
43 beggarvip 2019-03-11 22:56:01 +08:00 via Android 几百万导内存里,自建数据结构,哈希,或堆,或建树...等等,几十万查询,应该在一秒内 |
44 wangluofansi 2019-03-11 22:56:22 +08:00 via Android 对了,分批的时候需要 order by id |
45 hhhzccc 2019-03-12 10:38:58 +08:00 直接写 sql 干起来! |
46 moxunpw 2019-03-12 10:56:43 +08:00 百万的数据,没啥压力吧。。。我现在 3000w+数据用 MySQL 查 SQL 也好好的。。。 |