首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java Web实战篇-轻松提高千万级数据库查询效率

数据查询.jpeg

大家在刚开始搭建项目的时候可能考虑的不够全面,随着产品的推广 、业务场景的复杂和使用用户越来越多 数据会呈现快速增长。当数据达到千万级的时候 就会发现 查询速度越来越慢 用户体验也就越来越差,那怎样提升千万级数据查询效率呢?小萌简单整理了一下,希望对大家有所帮助!

优化数据库设计:

数据字段类型使用varchar/nvarchar替换char/nchar,变长字段存储空间小,节省存储空间。在查询的时候小的空间字段搜索效率更高。

查询的时候避免全表扫描,可以在where和order by的字段上建立索引。

where查询子句中不对null值做判断,会导致检索引擎放弃使用索引而使用全表扫描,如:select id,name from user where age is null 可以设置age 的默认值为0,保证没有null值,修改后的sql查询语句为:select id,name from user where age = 0。

谨慎使用索引,索引不是越多越好。一般一张表的索引数不要超过6个,如果太多要讨论业务是否合理或者是否索引建在了不常用的字段上。索引可以提高select 查询的效率,但是也响应降低了 insert和update 的效率,因为在执行insert和update时也可能会重建索引。

尽量不要更新索引数据,因为索引数据的顺序是表记录的物理顺序,一旦发生改变将会导致整个表记的顺序发生改变,将会消耗大量资源。如果业务需要频繁更新索引数据列 就要考虑索引是否创建合理,比如 用户ID、身份证号码或者手机号码不经常改变的列可以考虑创建索引。

字符型字段如果符合业务需求可以修改为数字类型字段,因为字符型字段会降低查询和连接的性能,并且增加存储的开销。执行搜索的适合查询和连接会逐个比较字符串的每一个字符,如果是数据类型比对一次就可以了。

SQL查询优化

where 查询语句中避免使用**!=或 **操作符,搜索引擎会执行全表扫描而不执行创建的索引。

where 查询语句中 避免使用or来连接条件查询数据,也会导致搜索引擎执行全表扫描而不执行创建的索引,例如:select id,name from user where age = 18 or age = 25可以修改为select id,name from user where age = 18 union all select id,name from user where age = 25。

** in 和 not in也避免使用,也将导致全表扫描,例如:select id,name from user where age in (18,19,20)** 如果是连续的则可以考虑使用between and,例如:select id,name from user where age between 18 and 20。

like 语句导致全表扫描,例如:select id,name from user where name like ‘%微信%’。

wehre 查询语句中避免使用参数,也会全表扫描,SQL在运行时才会进行局部变量的解析,优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。如果编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:select id,name from user where age = @age当然也可以改为强制使用索引:select id,name from user with(index(索引名)) where age =@ age

where查询语句避免使用表达式,也会导致查询的时候放弃使用索引导致全表扫描。例select id,name from user where age/2 = 10 ** 可以更改为 ** select id,name from user where age = 102*。

where查询语句避免使用函数操作,也会导致查询的时候放弃使用索引导致全表扫描。例如:select id,name from user where substring(name,1,3)=’abc’可以改为select id,name from user where name like ‘abc%’。

不要使用select * from user 查询,要用具体的字段名。不要返回任何用不到的字段。

不要使用游标,大家都知道游标的效率非常差。

避免出现大实务业务,会降低系统的并发能力。

Java后台优化

使用JDBC连接数据库。

合理使用数据缓存。

控制好内存,不要全部数据放到内出做处理,可以边读边处理。

少创造对象。

数据库性能优化

使用存储过程

硬件调整

调整数据库

跟多实战资讯请关注“IT实战联盟”公众号哦~~~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180109G0NHBQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券