springboot web项目,百万级数据查询的优化

数据库部分

  1. 对需要进行查询的字段建立索引,where语句中如果有2个字段,则对该两个字段进行建立联合索引;

  2. 如果有模糊查询,尽量不使用like % 这种模式,这种会忽略索引,使用全文搜索,可以使用location进行模糊查询

  3. 修改数据库的引擎,如果只是大部分进行查询,没有大规模的修改等操作,可以用MyISAM引擎,这种引擎对数据库的插入以及查询操作特别快,但是不支持事务,常规的InnoDB引擎可以支持事务,但是相应的插入以及查询的速度就慢下来了

使用redis数据库

  1. 记住不要使用mybatis的分页插件,因为经过测试,mybatis的分页插件中使用了count(0)语句统计所有的查询的数量,这个语句严重拖慢了查询的速度,大概有3-5s的时间,这个不能忍。

  2. 使用redis数据库,一次查询出所有的结果,并将结果放入redis数据库中,在control界面进行分页,使用list进行分页,每次从list中取出一页的内容,传到web页面;记住,不能一次将所有的数据全部传入web界面,这样web界面的响应加载时间会特别长,速度非常慢;这样做,第一次查询的时间大概2-3s,但是翻页的结果是直接从redis数据库中取的,所以响应时间特别快。

  3. 使用redis数据库,需要设置redis数据库的大小,当所需内存超过最大的maxmemmory的时候,将配置maxmemory-policy 的设置改为allkeys-lru

实验效果: 数据库大小为300w数据,没经过优化之前的查询速度为5-7s/每次 ;通过上述优化,第一次查询一个从未查过的数据时间为2-3s,之后翻页或者查询第二次,时间均为1s以内。

redis相关命令

运行cmd

然后到redis路径

运行命令: redis-server redis.windows.conf 启动redis服务

新建一个cmd,启动redis命令行工具:redis-cl

keys * 查找所有的keys

flushall 删除所有的缓存

info memory 查看相关的内存信息

参考链接:

https://blog.csdn.net/qq_33556185/article/details/52192551

https://blog.csdn.net/u014590757/article/details/79788076

猜你喜欢

转载自blog.csdn.net/yuhaolalala/article/details/87902108