几千万条数据,怎么让查询效率高起来?

来源:互联网 发布:unity3d网络游戏开发 编辑:程序博客网 时间:2024/04/30 08:37
大数据量的优化,自己总结了下,在自己的认知范围内,整理了两个大方面
一、sql语句方面的优化
1、使用索引查询
        1、造成全表查询的(索引失效的情况):避免null值查询。索引列的数据不要大量重复。where语句中or(union替代)、in not in(between and)、like、!=和<>符号的使用。where子查询中使用参数引入(

 select id from t where num=@num 可以改为强制查询使用索引: select id from t with(index(索引名)) where num=@num

)、

where 子句中对字段进行表达式操作(select * from user where id/2 =100 强制改为select * from user where id =100*2)、where字句中对字段进行函数操作的、在where字句等号左面使用函数、算数运算及其他运算。


    

    

2、索引勿滥用

在where及order by涉及的列上建索引。索引并不是越多越好(最好不要超过6个)
        3、数据量的优化:尽量使用数字型字段(字符增加存储开销)、尽可能的使用vachar/nvarchar代替char/nchar(节省存储空间),避免临时表过多的创建和删除,尽量使用表变量来代替临时表、尽量避免大数据量的返回、游标操作数据超过1万行不好等。
        4、java方面:尽量少早对象、大数据和小数据的操作分开、使用jdbc操作数据库、控制好内存,让数据流动,而不是全部在内存、做好缓存。
        5、分区表的创建    
二、数据库的优化
        1硬件调整性能 最有可能影响性能的是磁盘和网络吞吐量,解决办法扩大虚拟内存,并保证有足够可以扩充的空间;把数据库服务器上的不必要服务关闭掉;把数据库服务器和主域服务器分开;把SQL数据库服务器的吞吐量调为最大;在具有一个以上处理器的机器上运行SQL。

2、使用存储过程

应用程序的实现过程中,能够采用存储过程实现的对数据库的操作尽量通过存储过程来实现,因为存储过程是存放在数据库服务器上的一次性被设计、编码、测试,并被再次使用,需要执行该任务的应用可以简单地执行存储过程,并且只返回结果集或者数值,这样不仅可以使程序模块化,同时提高响应速度,减少网络流量,并且通过输入参数接受输入,使得在应用中完成逻辑的一致性实现。

3、应用程序结构和算法

建立查询条件索引仅仅是提高速度的前提条件,响应速度的提高还依赖于对索引的使用。因为人们在

使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,特别是对数据量不是特别大的数据库操作时,是否建立索引和使用索引的好坏对程序的响应速度并不大,因此程序员在书写程序时就忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在数据量特别大时或者大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策支持系统DSS)中表现得尤为明显。在工作实践中发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。在对它们进行适当的优化后,其运行速度有了明显地提高!


0 0
原创粉丝点击