zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    背水一战 Windows 10 (26)
    背水一战 Windows 10 (25)
    背水一战 Windows 10 (24)
    背水一战 Windows 10 (23)
    背水一战 Windows 10 (22)
    背水一战 Windows 10 (21)
    背水一战 Windows 10 (20)
    背水一战 Windows 10 (19)
    背水一战 Windows 10 (18)
    背水一战 Windows 10 (17)
  • 原文地址:https://www.cnblogs.com/smuxiaolei/p/7722962.html
Copyright © 2011-2022 走看看