在对数据库进行操作时,如果SQL语句书写不当,对程序的效率会造成很大影响。

提高SQL效率可以从一下几个方面入手:

1,数据库设计与规划

  • Primary Key字段的长度尽量小,能用small integer就不要用integer。例如对于员工数据表,如果能用员工编号做主键,就不要用身份证号码。
  • 字符字段如果长度固定,就不要用varchar或nvarchar类型,而应该用char或nchar类型。例如身份证号码、银行密码等字段。
  • 字符长度如果长度不固定,则应该使用varchar或nvarchar类型。除了可节省存储空间外,存取硬盘也会有效率。例如地址、个人介绍等。
  • 涉及字段时,如果其值可有可无,最好也给一个默认值,并设成不允许NULL。因为有些数据库在存放和查询有NULL的数据表时,会花费额外的运算动作,例如SQL Server数据库。

2,适当地创建索引

  • Primary Key字段可以自动地创建索引,而Foreign Key字段不可以。为Foreign Key字段手动创建索引,即使是很少被JOIN的数据表也有必要这么做。
  • 为经常被查询或排序的字段创建索引。
  • 创建索引字段的长度不宜过长,不要用超过20个字节的字段,例如地址等。
  • 不要为内容重复性高德字段创建索引,例如性别等。
  • 不要为使用率低的字段建立索引。
  • 不宜为过多字段建立索引,否则会影响到INSERT、UPDATE和DELETE语句的性能。
  • 如果数据表存放的数据很少,就不必刻意使用索引。

3,使用索引功能

  在查询数据表时,使用索引查询可以极大提升查询速度,但是如果where子句书写不当,即使某些列存在索引,也不能使用该索引查询,而同样会使用全表扫描,这就造成了查询速度的降低。在where语句中避免使用一下关键字:

  NOT、!=、<>、!>、!<、EXISTS、IN、LIKE、||。

  使用LIKE关键字做模糊查询时,即使已经为某个字段建立了索引,但需要以常量字符开头才会用到索引,如果以“%”开头则不会使用索引。例如name like '%To‘ 不启用name字段上的索引;而 name like ‘To%’会启用name字段上的索引。

4,避免在where子句中对字段使用函数

5,AND与OR的使用

  在AND运算中,只要有一个条件用到索引,即可大幅提升查询速度。但在OR运算中,则要所有的条件都有使用到索引才能提升查询速度,因此使用OR运算符需要特别小心。

6,JOIN与子查询

  相对于子查询,如果能使用JOIN完成的查询,一般建议使用后者。原因除了JOIN的语法较容易理解外,在多数的情况下,JOIN的性能也会比子查询高。

7,其它查询技巧

  DISTINCT、ORDER BY语法,会让数据库做额外的计算。如果没有要过滤重复记录的需求,使用UNION ALL会比UNION更好,因为后者会加入类似DISTINCT的算法。

8,尽可能使用存储过程(Stored Procedure)

  Stored Procedure除了经过事先编译、性能较好以外,也可能减少SQL语句在网络上的传递,方便商业逻辑的重复使用。

如何提升SQL语句的查询性能的更多相关文章

  1. mysql 常用 sql 语句 - 快速查询

    Mysql 常用 sql 语句 - 快速查询 1.mysql 基础 1.1 mysql 交互         1.1.1 mysql 连接             mysql.exe -hPup    ...

  2. SQL 语句在查询分析器执行很快,程序 Dapper 参数化查询就很慢(parameter-sniffing)

    这个问题困扰我好长时间了,使用SQLSERVER 事务探查器找到执行超时的SQL语句,参数查询都是通过执行exe sp_executesql 的存储过程调用,因为它能够分析并缓存查询计划,从而优化查询 ...

  3. MySQL的EXPLAIN命令用于SQL语句的查询执行计划

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...

  4. SQL语句之查询(SELECT)

    目录 SQL语句之查询(SELECT) 简单查询 限定查询 模糊查询 排序查询 多表查询 SQL语句之查询(SELECT) SQL是用于访问和处理数据库的标准计算机语言: 中文:结构化查询语言:英文全 ...

  5. SQL语句在查询分析器中可以执行,代码中不能执行

    问题:SQL语句在查询分析器中可以执行,代码中不能执行 解答:sql中包含数据库的关键字,将关键字用[]括起来,可以解决. 后记:建数据库的时候尽量避免使用关键字. 例子: sql.Format(&q ...

  6. 如何在 Linux 上用 SQL 语句来查询 Apache 日志

    Linux 有一个显著的特点,在正常情况下,你可以通过日志分析系统日志来了解你的系统中发生了什么,或正在发生什么.的确,系统日志是系统管理员在解决系统和应用问题时最需要的第一手资源.我们将在这篇文章中 ...

  7. 在Hibernate中使用HibernateTemplate来进行包含sql语句的查询

    /**     * 使用sql语句进行查询操作     * @param sql     * @return     */    public List queryWithSql(final Stri ...

  8. Sql语句之查询所有学生所有科目分数及总分

    昨天练Sql语句,数据库建了四个表分别是,学生表,课程表,成绩表以及教师表(教师表不在讨论范围),突然想到以前高中时代老师手上的那张成绩表,然后我就寻思着能不能用Sql语句把表打印出来,以下是我的思考 ...

  9. Python与开源GIS:在OGR中使用SQL语句进行查询

    摘要: 属性选择与空间选择都可以看作是OGR内置的选择功能,这两种功能可以解决大部分实际中的问题.但是也有这种时候,就是进行查询时的条件比较复杂.针对这种情况,OGR也提供了更加灵活的解决方案:支持使 ...

随机推荐

  1. 【Oracle】redo与undo

    一 .redo(重做信息) 是Oracle在线(或归档)重做日志文件中记录的信息,万一出现失败时可以利用这些数据来“重放”(或重做)事务.Oracle中记录这些信息的文件叫做redo log file ...

  2. O​r​a​c​l​e​1​1​g​自​带​的​S​Q​L​ ​d​e​v​e​l​o​p​e​r​无​法​打​开​解​决​

    在安装完Oracle Database 11g Release 2数据库,想试一下Oracle自带的SQL Developer工具,在操作系统菜单的所有程序中找到SQL Developer如下所示,并 ...

  3. Qt无法用UTF-8编辑问题

    原因: Windows默认编码格式是GBK. 而QT-各默认版本的编码格式是UTF-8. 解决方法": Windows环境下,Qt Creator,菜单->工具->选项-> ...

  4. 图像局部显著性—点特征(Fast)

    fast作为几乎最快的角点检测算法,一般说明不附带描述子.参考综述:图像的显著性检测--点特征 详细内容,请拜访原=文章:Fast特征点检测算法 在局部特征点检测快速发展的时候,人们对于特征的认识也越 ...

  5. mac系统下安装、启动、停止mongodb

    mongodb是非关系型数据库,mysquel是关系型数据库,前者没有数据表这个说法,后者有 一. 下载nodejs,安装,一直到 node -v显示版本号,表示安装成功. 二. 本文主要讲解,安装包 ...

  6. Python—字符串+变量

    字符串转义字符格式化内建函数(后延)转义字符用一个特殊的方法表示出一系列不方便写出的内容,比如回车键,换行键,退格键借助反斜杠字符,一旦字符串中出现反斜杠,则反斜杠后面一个火几个字符表示已经不是原来的 ...

  7. luogu P1856 [USACO5.5]矩形周长Picture 扫描线 + 线段树

    Code: #include<bits/stdc++.h> #define maxn 200007 #define inf 100005 using namespace std; void ...

  8. Dell R720修改远程管理口的密码

    今天有个客户需要通过远程管理口来查看系统事件日志,但是他们把初始密码改过并且还给忘记了.后来我决定进操作系统(cent os)进行修改.整个过程很简单,进入系统后只需要三个步骤就解决问题了 1.安装软 ...

  9. Oracle关联查询-数据类型不一致问题 ORA-01722: 无效数字

    一.存在表A和表B,都包含字段user_no,但数据类型不一致,如下: create table A ( user_id varchar2(20), user_no number(12,0), xxx ...

  10. Photoshop教程

    Photoshop百科 Adobe Photoshop,简称“PS”,是由Adobe Systems开发和发行的图像处理软件. Photoshop主要处理以像素所构成的数字图像.使用其众多的编修与绘图 ...