千万及以上数据量级数据库查询优化

分治法优化分片分区分库、分表

表优化表结构优化垂直切分水平切分

索引

查询语句优化精确查询条件limit与skip

本文是基于MongoDB撰写,但思维适用所有数据库

对于百万数据,无论是mysql还是其他数据库,都能较轻松的查询出想要的数据。但千万级甚至更多时查询就开始费劲了,那么除了硬件的限制,在软件方面也应该对大数据量查询进行特殊处理,而不能简单的直找。

分治法优化

分片

分片是针对分布式系统提出的一个概念,通过算法(如一致性哈希算法)将数据分摊在不同的子服务器中,这样大大减少了服务器的请求压力,提高系统响应效率。

分区

分区是针对单服务器,将数据分摊在不同的存储介质(如磁盘)中,提高了服务器的存储效率,同时查询也可能根据存储介质来区别。

分库、分表

分库是将数据分摊在不同的数据库中,比如在系统中用户板块和商品板块,两个板块数据量都足够大,那么可以分成两个数据库存储,这样很容易就将两类数据区别来,提升查询效率。 分表同样的原理,创建多个相同结构的数据表,将大数据分开多个表存储。

表优化

表结构优化

从表结构入手,优化存储结构,提升查询效率

垂直切分

如果是因为数据表多而导致的数据多,那么可以垂直切分,将相关数据融入同一张数据表中。

水平切分

如果是因为单表数据多,那么可以水平切分,添加中间表或者制定其他规则,将数据拆分至多张表。

索引

创建索引可以大大提高单表的查询速度,也是查询优化中最常见的方法,但是它会增加数据的存储大小。 MongoDB创建索引

db.集合名称.ensureIndex({字段名:1})// 1 表示升序, -1 表示降序

db.集合名称.ensureIndex({字段名:1}, {"unique":true})// 创建唯一索引

db.集合名称.ensureIndex({字段名:1, 字段名:1})// 创建联合索引

MongoDB查看索引

db.集合名称.getIndexes()

MongoDB删除索引

db.集合名称.dropIndex({索引名:1})

查询语句优化

精确查询条件

合理应用MongoDB中的各种运算符,以及聚合。 MongoDB的聚合十分强大,完全可以通过聚合直接返回想要的数据结构,不用查询完后台还继续处理。

limit与skip

⽤于读取指定数量的⽂档:db.集合名称.find().limit(number) ⽤于跳过指定数量的⽂档:db.集合名称.find().skip(number)

db.集合名.find().limit(10).skip(5)// 只查询10条数据且跳过前5条

相关文章

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。