当前位置: 首页 > 科技观察

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

时间:2023-03-13 07:30:33 科技观察

JavaWeb实战篇-轻松提升千万级数据库查询快速增长的效率。当数据达到千万级的时候,你会发现查询速度越来越慢,用户体验也越来越差。那么如何提高千万级数据的查询效率呢?小萌简单整理了一下,希望对大家有所帮助!优化数据库设计:数据字段类型使用varchar/nvarchar代替char/nchar,变长字段存储空间小,节省存储空间。查询时,较小的空间字段搜索效率更高。为了避免查询时全表扫描,可以在where和orderby的字段上建立索引。如果where查询子句中没有判断为null值,搜索引擎将放弃使用索引,转而使用全表扫描,如:selectid,namefromuserwhereageisnullage的默认值可以是设置为0以确保没有空值。修改后的SQL查询语句为:selectid,namefromuserwhereage=0。谨慎使用索引,索引越多越好。一般一个表的索引数不要超过6个,如果过多,需要讨论业务是否合理,索引是否建立在不常用的字段上。索引可以提高select查询的效率,但也会降低insert和update的效率,因为在执行insert和update的时候也可能会重建索引。尽量不要更新索引数据,因为索引数据的顺序就是表记录的物理顺序。一旦改变,整个表的顺序都会改变,会消耗大量的资源。如果业务需要频繁更新索引数据列,需要考虑索引创建是否合理。比如用户ID、身份证号或者手机号这些不经常变化的列可以考虑建立索引。字符型字段如果满足业务需求可以改为数值型字段,因为字符型字段会降低查询和连接性能,增加存储开销。适当的查询和执行搜索的连接将字符串的每个字符一个一个地比较,如果是数据类型,就比较一次。SQL查询优化避免在where查询语句中使用**!=或<>**运算符,搜索引擎将执行全表扫描而不是创建索引。避免在where查询语句中使用or连接条件查询数据,这也会导致搜索引擎进行全表扫描而不是执行创建的索引,例如:selectid,namefromuserwhereage=18orage=25可以修改为selectid,namefromuserwhereage=18unionallselectid,namefromuserwhereage=25.**in和notin也是避免的,同样会造成全表扫描,例如:selectid,namefromuserwhereagein(18,19,20)**如果是连续的,可以考虑使用betweenand,例如:selectid,namefromuserwhereagebetween18-20.like语句结果全表扫描,例如:selectid,namefromuserwherenamelike'%WeChat%'。避免在wehre查询语句中使用参数,还要扫描全表。SQL只会在运行时分析局部变量。优化器不能将访问计划的选择推迟到运行时;它必须在编译时选择。如果accessplan是在编译时建立的,变量的值还是未知的,所以不能作为索引选择的输入项。例如下面的语句会进行全表扫描:selectid,namefromuserwhereage=@age当然也可以强制使用索引代替:selectid,namefromuserwith(index(indexname))whereage=@agewherequery语句避免了表达式的使用,同样会导致查询时放弃索引,造成全表扫描。示例selectid,namefromuserwhereage/2=10**可以更改为**selectid,namefromuserwhereage=102*。where查询语句避免了函数操作的使用,同时也会导致查询时遗弃索引,造成全表扫描。例如:selectid,namefromuserwheresubstring(name,1,3)='abc'可以改为selectid,namefromuserwherenamelike'abc%'。不要使用select*fromuser查询,使用特定的字段名称。不要返回任何未使用的字段。不要使用游标,众所周知它们效率很低。避免大规模的实际业务,会降低系统的并发能力。Java后台优化使用JDBC连接数据库。明智地使用数据缓存。控制好内存,不要把所有的数据都放进去处理,可以边读边处理。创建更少的对象。使用存储过程进行数据库性能优化如果在具体的业务执行过程中可以使用存储过程来操作数据库,就尽量使用。由于存储过程是存放在数据库服务器上,经过设计、编码、测试、再调用,需要执行。存储过程使用起来非常简单。它可以提高响应速度,减少网络使用流量等。硬件调整磁盘和网络吞吐量也可能影响数据库的性能。可以通过扩展虚拟内存的方式,将数据库服务器和主服务器分开部署。数据服务器吞吐量调至最大。调整数据库如果在实际业务实现中表的查询频率过高,可以在表上创建索引;根据where查询条件建立索引,尽量建立一个只有一个聚簇索引的整型键,且数据在物理上是有序的在数据页上,缩小搜索范围,对所有符合的列建立非聚簇索引查询中经常使用,可以最大程度的覆盖查询;但是,索引不能太多,在执行UPDATEDELETEINSERT语句时维护这些索引的开销会急剧增加;避免索引中有太多的索引键;避免使用大数据类型的列作为索引;确保每个索引键值具有少量行。