mysql表数据量太大,达到了1亿多条数据,除了分库分表之外,还有没有其他的解决方式?
mysql在常规配置下,一般只能承受2000万的数据量(同时读写,且表中有大文本字段,单台服务器) 。现在超过1亿,并不断增加的情况下,建议如下处理:1 分表 。可以按时间,或按一定的规则拆分,做到查询某一条数据库,尽量在一个子表中即可 。这是最有效的方法2 读写分离 。尤其是写入,放在新表中,定期进行同步 。
如果其中记录不断有update,最好将写的数据放在 redis中,定期同步3 表的大文本字段分离出来,成为独立的新表 。大文本字段,可以使用NOSQL数据库4 优化架构,或优化SQL查询,避免联表查询,尽量不要用count(*), in,递归等消耗性能的语句5 用内存缓存,或在前端读的时候,增加缓存数据库 。
MySQL查询select * from table where id in (几百或几千个id),如何提高效率?
看了下面各位的回答,有的说用exist,有的说用join,难道你们不是在把简单的事情复杂化了吗?竟然还有子表子查询一说?也有朋友说的很精准,不要用select *,这个*是个坑,实际开发过程中,关于MySQL开发规范也会明确告知大家不要select * 。首先我想问的是:查询MySQL的一张表怎么查最快?当然是根据主键查询了!默认你的MySQL库、表引擎是Innodb引擎,然后会有一颗主键的B 树,叶子节点就是这个主键索引对应的数据,意味着一次查询即可,回表都不需要好不好?简单直接!这就是MySQL在Innodb引擎下的聚集索引 。
什么是聚集索引?InnoDB聚集索引的叶子节点存储行记录,因此InnoDB必须要有且只有一个聚集索引 。1.如果表定义了PK(Primary Key,主键),那么PK就是聚集索引 。2.如果表没有定义PK,则第一个NOT NULL UNIQUE的列就是聚集索引 。3.否则InnoDB会另外创建一个隐藏的ROWID作为聚集索引 。
这种机制使得基于PK的查询速度非常快,因为直接定位的行记录 。下图是利用普通索引做查询时候的一个回表操作,如何避免回表操作?使用覆盖索引!即select xxx,yyy from table where xxx=' and yyy=',只能查询xxx,yyy就会避免回表操作!所以你还搞什么其他各种操作来秀呢?只不过题主说了id不是连续的,所以做不到范围查询,也就无法between查询了 。
【MySQL回表查询与索引覆盖,mysql回表】不要纯粹的依赖数据库如果这个查询量级很大,并发很高,原则上我们是不允许直接查库的,中间必须有一层缓存,比如Redis 。那至于这个数据怎么存储到redis就要看具体业务具体分析了 。如果内存足够,甚至可以把这几十万的数据直接放到redis里面去,然后通过redis 的管道查询一次给批量查询出来 。如果没必要存储这么多,或者不让存这么多,是不是可以采用redis的淘汰策略来控制缓存里的数据都是热点数据? 。
推荐阅读
- 咸宁中考成绩查询,2008咸宁中考查分方法在线等待
- 2020年中考时间安排,谁知道今年呼伦贝尔的中考成绩什么时候可以查询呀
- nmgzsks,查询内蒙古高考考场
- 进入oppo官方网站查询真伪,怎么查oppo手机是不是正品
- 福建省会考成绩查询,查会考成绩的验证码输什么
- ipad如何在官网查序列号,苹果平板电脑序列号查询激活日期方法是怎样的
- 怎么查录取结果,高考录取结果如何查询
- 河北师大自考网,河北师范大学自学考试毕业证号如何查询
- 地生中考成绩查询网站2021,20011年东营生物地理中考成绩怎么查询
- 苹果官网怎么查询保修期限,苹果官网怎么查询苹果手机保修期限