sql优化

其他:http://www.cnblogs.com/ShaYeBlog/archive/2013/07/31/3227176.html

执行数据库查询时,如果要查询的数据有很多,假如上千万条,用什么办法可以提高查询效率?

1,在数据库设计方面

(1)建立索引

(2)建立分区(mysql,比如按时间分区)

(3)尽量使用固定长度的字段

(4)限制字段长度

2,在数据库I/O方面

(1)增加缓冲区

(2)如果涉及表的级联,不同的表存储在不同的磁盘上,以增加I/O速度

3,在SQL语句方面

(1)优化sql语句,减少比较次数

(2)限制返回的条目数

(3)适当使用存储过程处理,存储过程在创建时就已经在数据库服务器上进行了编译并保存,比单个sql要快,同时只需

提供存储过程名和必须的参数即可,减少网络延迟。

4,在Java方面

(1)如果反复使用查询,使用preparestatement减少查询次数

PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement、PreparedStatement 和 CallableStatement三种方式来执行查询语句,其中 Statement 用于通用查询, PreparedStatement 用于执行参数化查询,而 CallableStatement则是用于存储过程。同时PreparedStatement还经常会在Java面试被提及,譬如:Statement与PreparedStatement的区别以及如何避免SQL注入式攻击?这篇教程中我们会讨论为什么要用PreparedStatement?使用PreparedStatement有什么样的优势?PreparedStatement又是如何避免SQL注入攻击的?

PreparedStatement是java.sql包下面的一个接口,用来执行SQL语句查询,通过调用connection.preparedStatement(sql)方法可以获得PreparedStatment对象。数据库系统会对sql语句进行预编译处理(如果JDBC驱动支持的话),预处理语句将被预先编译好,这条预编译的sql查询语句能在将来的查询中重用,这样一来,它比Statement对象生成的查询速度更快。

使用PreparedStatement的参数化的查询可以阻止大部分的SQL注入。在使用参数化查询的情况下,数据库系统(eg:MySQL)不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有破坏性的指令,也不会被数据库所运行。
避免SQL注入的第二种方式:
在组合SQL字符串的时候,先对所传入的参数做字符取代(将单引号字符取代为连续2个单引号字符,因为连续2个单引号字符在SQL数据库中会视为字符中的一个单引号字符

http://www.importnew.com/5006.html

原文地址:https://www.cnblogs.com/smuxiaolei/p/7722962.html