IT实战联盟博客:http://blog.100boot.cn​​​​​​​

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

####优化数据库设计:

  1. 数据字段类型使用varchar/nvarchar 替换 char/nchar,变长字段存储空间小,节省存储空间。在查询的时候小的空间字段搜索效率更高。
  2. 查询的时候避免全表扫描,可以在whereorder by 的字段上建立索引。
  3. where 查询子句中不对null值做判断,会导致检索引擎放弃使用索引而使用全表扫描,如:select id,name from user where age is null 可以设置age 的默认值为0,保证没有null值,修改后的sql查询语句为:select id,name from user where age = 0
  4. 谨慎使用索引,索引不是越多越好。一般一张表的索引数不要超过6个,如果太多要讨论业务是否合理或者是否索引建在了不常用的字段上。索引可以提高select 查询的效率,但是也响应降低了 insert和update 的效率,因为在执行insert和update时也可能会重建索引。
  5. 尽量不要更新索引数据,因为索引数据的顺序是表记录的物理顺序,一旦发生改变将会导致整个表记的顺序发生改变,将会消耗大量资源。如果业务需要频繁更新索引数据列 就要考虑索引是否创建合理,比如 用户ID、身份证号码或者手机号码不经常改变的列可以考虑创建索引。
  6. 字符型字段如果符合业务需求可以修改为数字类型字段,因为字符型字段会降低查询和连接的性能,并且增加存储的开销。执行搜索的适合查询和连接会逐个比较字符串的每一个字符,如果是数据类型比对一次就可以了。

####SQL查询优化

  1. where 查询语句中避免使用**!= <> **操作符,搜索引擎会执行全表扫描而不执行创建的索引。
  2. 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
  3. ** 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
  4. like 语句导致全表扫描,例如:select id,name from user where name like ‘%微信%’
  5. wehre 查询语句中避免使用参数,也会全表扫描,SQL在运行时才会进行局部变量的解析,优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。如果编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:select id,name from user where age = @age 当然也可以改为强制使用索引:select id,name from user with(index(索引名)) where age =@ age
  6. where查询语句避免使用表达式,也会导致查询的时候放弃使用索引导致全表扫描。例select id,name from user where age/2 = 10 ** 可以更改为 ** select id,name from user where age = 10*2
  7. where查询语句避免使用函数操作,也会导致查询的时候放弃使用索引导致全表扫描。例如:select id,name from user where substring(name,1,3)=’abc’ 可以改为select id,name from user where name like ‘abc%’
  8. 不要使用select * from user 查询,要用具体的字段名。不要返回任何用不到的字段。
  9. 不要使用游标,大家都知道游标的效率非常差。
  10. 避免出现大实务业务,会降低系统的并发能力。

####Java后台优化

  1. 使用JDBC连接数据库。
  2. 合理使用数据缓存。
  3. 控制好内存,不要全部数据放到内出做处理,可以边读边处理。
  4. 少创造对象。

####数据库性能优化

  1. 使用存储过程

      如果在具体业务实现过程中,可以使用存储过程操作数据库可以尽量使用,由于存储过程是存放在数据库服务器上的一次性被设计、编码、测试,被再次调用,需要执行该存储过程可以很简单的使用。可以提高响应速度,减少网络使用流量等等。
    
  2. 硬件调整
     影响数据库性能的也可能是磁盘和网络吞吐量,可以通过扩大虚拟内存,把数据库服务器和主服务器分开部署。数据服务器吞吐量调为最大。
    
  3. 调整数据库
      如果在实际业务实现中对表查询频率过高,可以对表创建索引;按照where查询条件建立索引,尽量为整型键建立为有且只有一个簇集索引,数据在物理上按顺序在数据页上,缩短查找范围,为在查询经常使用的全部列建立非簇集索引,能最大地覆盖查询;但是索引不可太多,执行UPDATE DELETE INSERT语句需要用于维护这些索引的开销量急剧增加;避免在索引中有太多的索引键;避免使用大型数据类型的列为索引;保证每个索引键值有少数行。
    

跟多实战资讯请关注“IT实战联盟”公号哦~~~
IT实战联盟博客:http://blog.100boot.cn​​​​​​​

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

  1. 《黑客攻防技术宝典:Web实战篇》习题答案(一)

    译者按:以下为<黑客攻防技术宝典:Web实战篇>一书第二版中的习题答案,特在此推出.如果读者发现任何问题,请与本人联系.英文答案请见:The Web Application Hacker' ...

  2. 《黑客攻防技术宝典Web实战篇@第2版》读书笔记1:了解Web应用程序

    读书笔记第一部分对应原书的第一章,主要介绍了Web应用程序的发展,功能,安全状况. Web应用程序的发展历程 早期的万维网仅由Web站点构成,只是包含静态文档的信息库,随后人们发明了Web浏览器用来检 ...

  3. 跟安全技术大师学习黑客攻防技术 ——《黑客攻防技术宝典:web实战篇》

    跟安全技术大师学习黑客攻防技术 --<黑客攻防技术宝典: web 实战篇> 随着网络技术的快速发展以及网络带宽的不断扩张, Web 应用程序几乎无处不在,渗透到社会的经济.文化.娱乐等各个 ...

  4. 《黑客攻防技术宝典Web实战篇》.Dafydd.Stuttard.第2版中文高清版pdf

    下载地址:网盘下载 内容简介 编辑 <黑客攻防技术宝典(Web实战篇第2版)>从介绍当前Web应用程序安全概况开始,重点讨论渗透测试时使用的详细步骤和技巧,最后总结书中涵盖的主题.每章后还 ...

  5. 黑客攻防技术宝典web实战篇:核心防御机制习题

    猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 黑客攻防技术宝典web实战篇是一本非常不错的书,它的著作人之一是burpsuite的作者,课后的习题值得关注 ...

  6. mysql数据库加载太慢_mysql千万级数据库插入速度和读取速度的调整记录

    一般情况下mysql上百万数据读取和插入更新是没什么问题了,但到了上千万级就会出现很慢,下面我们来看mysql千万级数据库插入速度和读取速度的调整记录吧. (1)提高数据库插入性能中心思想:尽量将数据 ...

  7. 如何实现mysql千万级数据库插入速度和读取速度

    mysql千万级数据库插入速度和读取速度的调整记录 2018.11.1 Mysql version 5.7.23 一般情况下mysql上百万数据读取和插入更新是没什么问题了,但到了上千万级就会出现很慢 ...

  8. sql语句提高数据库查询效率

    可以通过以下多个方面优化sql语句提高数据库查询效率 1. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描. 2. 应尽量避免在 where 子 ...

  9. oracle数据分布不均,oracle性能优化操作七:索引提高数据分布不均匀时查询效率...

    索引的选择性低,但数据的分布差异很大时,仍然可以利用索引提高效率. A.数据分布不均匀的特殊情况下,选择性不高的索引也要创建. 表ServiceInfo中数据量很大,假设有一百万行,其中有一个字段Di ...

  10. 提高MySQL数据库查询效率的几个技巧(转载)

    [size=5][color=Red]提高MySQL数据库查询效率的几个技巧(转)[/color][/size]       MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用. ...

最新文章

  1. js将字符串中所有反斜杠\替换成正斜杠/
  2. swig模板 PHP,nodejs前端模板引擎swig入门
  3. mysql主从增量同步_生产环境中mysql主从同步/完整/增量备份
  4. CentOS7安装Oracle11g R2全过程
  5. 【干货】2021中国“企服企业”规模化获客体系建设指南.pdf(附下载链接)
  6. java循环1000000000_Java11比Java8快多少,不是测试人员一眼也能看懂
  7. kafaka的消息存储机制
  8. 揭示Win32 API拦截细节/API hooking revealed (2)
  9. css background 旋转_纯CSS画小电视
  10. 自己动手打印一寸/两寸证件照
  11. python 金融量化盘后分析系统V0.48
  12. 创建Maven时生成的properties标签内容解释
  13. 七雄争霸如何获得鸿蒙碎片,七雄争霸手游资源如何获取
  14. 如何将ai转换为html,如何用AI输出html网页?AI画的图片-存储为web及所有格式-放到网页有锯齿?...
  15. 自媒体平台图文创作建议和技巧
  16. 动物识别系统 python实现+UI
  17. 学校介绍静态HTML网页设计作品 DIV布局学校官网模板代码 DW大学网站制作成品下载 HTML5期末大作业
  18. 以太坊编程-Geth
  19. 语音对讲功能在车载监控系统中的应用意义
  20. 论文阅读笔记(1):Deep Animation Video Interpolation in the Wild——野外深度动画视频插值(2021CVPR)

热门文章

  1. Linux下gdb调试(GUI)
  2. STM32相关问题解决方法
  3. python生成器的作用是什么_看完这篇,你就知道Python生成器是什么
  4. 计蒜客-最大子阵列 / NYOJ题目44-子串和
  5. 同余方程-NOIP2012TGD2T1
  6. 中国剩余定理----51nod1079
  7. 线段树详解 二 ----(区间修改区间查询)
  8. eclipse 创建java窗体_eclipse创建Dialog窗口的操作流程
  9. python中sticky_Python stickymeta包_程序模块 - PyPI - Python中文网
  10. 乐山计算机学校搬迁,【骨头再次发贴】谈谈新校区。