zoukankan      html  css  js  c++  java
  • 数据库sql优化

    1.数据库设计与规划
     1)primary key 字段的长度尽量小,能用small integer 就不要用integer。例如最好不要用身份证号做主键
     2)字符字段如果长度固定,就不要用varchar或nvarchar,应该使用char或nchar
     3)字符字段如果长度不固定,则应该使用varchar或nvarchar类型,可以节省存储空间,存取硬盘时效率比较好
     4)设计字段时,如果其值可有可无,最好也给一个默认值,并设置不允许为Null,有的数据库在存放和查询时会花费额外的运算,如MSSQL
    2.适当的创建索引
     1)primary key字段可以自动创建索引,而foreign key字段不可以,为Foreign Key字段手动创建索引,即使是很少被JOIN的数据表也有必要这样做。
     2)为经常被查询或排序的字段创建索引
     3)创建索引字段的长度不宜太长,不要超过20个字节的字段,例如地址等。
     4)不要为内容重复性高的字段创建索引,例如性别等。
     5)不要为使用率低的字段建立索引。
     6)不要为过多字段建立索引,否则会影响到INSERT、UPDATE、DELETE语句的性能。
     7)如果数据库表存放的数据很少,就不比可以使用索引。
    3.使用索引功能
     一下情况会使索引失效:
     1、在where语句中使用NOT、!=、<>、!>、!<、EXISTS、IN、LIKE、||
     2、使用LIKE关键字做模糊查询时,如果以%开头则不会使用索引,例如:name LIKE '%王',不启用name上的索引;而name LIKE '王%'会启用name字段上的索引。
    4.避免在where自居中对字段使用函数
     调用函数的次数与数据表的记录成正比。如果记录很所时,会严重影响查询性能。
    5.AND与OR的使用
     在AND运算中,只要有一个条件使用到索引,就可以大幅度提升查询速度。在OR运算中,则要所有的条件都有使用到索引才能提升查询速度,因此使用OR运算时要特别小心。
    6.JOIN与子查询
     相对于子查询,如果能使用JOIN完成的查询,一般建议采用JOIN,因为JOIN语法较容易理解外,在多数情况下,JOIN的性能也会比子查询高。
    7.其他查询技巧
     1)DISTINCT、ORDER BY 语法,会使数据库做额外的计算。
     2)如果没有要过滤重复记录的要求,使用UNION ALL会比UNION更好,因为后者会加入类似的DISTINCT的算法。
    8.尽可能使用存储过程(Stored Procedure)
     Stored Procedure除了经过事先编译、性能较好以外,也可减少SQL语句在网络中的传递,方便商业逻辑的重复使用。
    9.尽可能在数据源过滤数据
     使用SELECT语法时,尽量先用SQL条件或Stored Procedure过滤出索要的信息,避免将大量冗余数据返回给程序,然后由程序处理。

  • 相关阅读:
    2011大纽约区域赛试题 Decoding EDSAC Data 解题报告
    湘大OJ第1484题 Allocation of Memory
    谈谈对js作用域的理解与疑问,请各位指正。
    Closure Linter工具介绍,挺好用的。
    JSTL标签用法
    守柔WORD编程代码集 CHM版
    返回任意输出月的最后一天
    Spring中MultipartHttpServletRequest实现文件上传
    SPringMVC注解驱动 .
    账号正在另一客户端登录 判断方法
  • 原文地址:https://www.cnblogs.com/gaoxiang116/p/3663962.html
Copyright © 2011-2022 走看看