优化注意事项,轻易升高千万级数据库查询成效

下文整理sqlserver优化中的常用知识点和注意事项

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

 

图片 1

15、使用union all代替union

数据库性能优化

  1. 使用存储过程

      如果在具体业务实现过程中,可以使用存储过程操作数据库可以尽量使用,由于存储过程是存放在数据库服务器上的一次性被设计、编码、测试,被再次调用,需要执行该存储过程可以很简单的使用。可以提高响应速度,减少网络使用流量等等。
    
  2. 硬件调整

     影响数据库性能的也可能是磁盘和网络吞吐量,可以通过扩大虚拟内存,把数据库服务器和主服务器分开部署。数据服务器吞吐量调为最大。
    
  3. 调整数据库

      如果在实际业务实现中对表查询频率过高,可以对表创建索引;按照where查询条件建立索引,尽量为整型键建立为有且只有一个簇集索引,数据在物理上按顺序在数据页上,缩短查找范围,为在查询经常使用的全部列建立非簇集索引,能最大地覆盖查询;但是索引不可太多,执行UPDATE DELETE INSERT语句需要用于维护这些索引的开销量急剧增加;避免在索引中有太多的索引键;避免使用大型数据类型的列为索引;保证每个索引键值有少数行。
    

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

图片 2

IT实战联盟.jpg

21、所有业务都按照一定的顺序依次访问表,可以避免出现死锁现象

数据查询.jpeg

 摘要:

优化数据库设计:

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

1、表上未建立合理的索引

Java后台优化

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

10、查询语句写法问题

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 = 102*。
  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. 避免出现大实务业务,会降低系统的并发能力。

3、统计信息不准确,导致索引乱用

11 、数据 日志需部署在不同的磁盘上

 

23、使用连接替代子查询

16、谨慎使用distinct ,它可能使查询变慢,可参阅执行计划

19、select into会锁系统表 sysobjects sysindexes 等,谨慎使用

22、连接表,需使用小表连大表,可加快脚本速度

17、between速度高于in

6、代码出现异常,导致死锁

4、网络异常,数据交换慢

20、判断行是否存在,使用exists效率会高于count

5、单次数据吞吐量大,导致显示慢

18、合理使用临时表,避免多次获取数据

13、索引碎片维护

2、服务器内存过小,导致缓存过少,数据库频繁的交互数据

14、少用游标,使用临时表加while代替循环


12、从业务上对表和库进行纵向或横向分割

7、select 查询返回过多的列或行

本文由澳门威斯尼人平台登录发布于澳门威斯尼人平台登录,转载请注明出处:优化注意事项,轻易升高千万级数据库查询成效

相关阅读