可以通过以下多个方面优化sql语句提高数据库查询效率

1. 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

2. 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all select id from t where num=20

3. in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用 between 就不要用 in 了: select id from t where num between 1 and 3

4. 下面的查询也将导致全表扫描: select id from t where name like ‘%abc%’

5. 如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描: select id from t where num=@num 可以改为强制查询使用索引: select id from t with(index(索引名)) where num=@num

6. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where num/2=100 应改为: select id from t where num=100*2

7. 应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如: select id from t where substring(name,1,3)=’abc’–name以abc开头的id select id from t where datediff(day,createdate,’2005-11-30′)=0–‘2005-11-30’生成的id 应改为: select id from t where name like ‘abc%’ select id from t where createdate>=’2005-11-30′ and createdate<’2005-12-1′

8 不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。

9. 不要写一些没有意义的查询,如需要生成一个空表结构: select col1,col2 into #t from t where 1=0 这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样: create table #t(…)

10. 很多时候用 exists 代替 in 是一个好的选择: select num from a where num in(select num from b) 用下面的语句替换: select num from a where exists(select 1 from b where num=a.num)

11. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

12. 尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。

13. 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

14. 尽量避免大事务操作,提高系统并发能力。

sql语句提高数据库查询效率相关推荐

  1. 提高数据库查询效率的八个方法

    当用户在一张大表中采用这个LIKE语句的话,就会发现这个查询语句的运行效率非常的慢.这是什么原因造成的呢?其实,不管是Like 关键字,若采用MATCHES关键字的话,若在大量数据中查找符合条件的记录 ...

  2. [转]详细讲解提高数据库查询效率的实用方法、外键关于性能

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  3. 提高数据库查询效率的方法

    优化数据库设计 1.数据字段类型使用varchar/nvarchar 替换 char/nchar,变长字段存储空间小,节省存储空间.在查询的时候小的空间字段搜索效率更高. 2.查询的时候避免全表扫描, ...

  4. 用SQL语句进行数据库查询(简单查询)

    前言

  5. 提高MySQL数据库查询效率的几个技巧(转载)

    [size=5][color=Red]提高MySQL数据库查询效率的几个技巧(转)[/color][/size]       MySQL由于它本身的小巧和操作的高效, 在数据库应用中越来越多的被采用. ...

  6. JavaWeb学习笔记(数据库、SQL语句、数据查询语法、完整性约束、编码、备份和恢复数据、多表查询)

    数据库.SQL语句.数据查询语法.完整性约束.编码.备份和恢复数据.多表查询 JavaWeb学习笔记 数据库 数据库概念 基本命令 启动和关闭mysql服务器 客户端登录退出mysql SQL语句 S ...

  7. 数组数据通过sql语句转为数据库表衔接到from或join后进行直接或关联查询

    Mybatis之数组数据通过sql语句转为数据库表衔接到from或join后进行直接或关联查询 外部数据 当前项目表格数据(表名:service_info) 将外部数据转为Table表格,与servi ...

  8. SQL语句在数据库中是如何执行的

    第一步:应用程序把查询SQL语句发给服务器端执行 我们在数据层执行SQL语句时,应用程序会连接到相应的数据库服务器,把SQL语句发送给服务器处理. 第二步:服务器解析请求的SQL语句 SQL计划缓存, ...

  9. 3,SQL语句及数据库优化

     1,统一SQL语句的写法 对于以下两句SQL语句,程序员认为是相同的,数据库查询优化器认为是不同的. 所以封装成复用方法,用标准模板来控制. select*from dual select*From ...

最新文章

  1. 最强 Java Redis 客户端
  2. multinormalNB多项式朴素贝叶斯原理及代码
  3. DW数据仓库与ODS的区别
  4. kruskai算法c语言实现,并查集 - xiaobaoqiu Blog
  5. android webview腾讯,Android webview无法播放腾讯视频问题
  6. 【Java】泛型中 extends 和 super 的区别?
  7. jQuery-1.9.1源码分析系列(六) 延时对象应用——jQuery.ready
  8. 高考辽宁理工高考计算机专业分数,辽宁高考985分数线2019-985大学在辽宁省的录取分数线及位次...
  9. Java 多线程:线程优先级
  10. libpcap讲解与API接口函数讲解
  11. Hibernate3.x异常No row with the given identifier exists 解决方法
  12. mfc在调整界面时左边的控件会丢失_Qt项目中如何完成一个漂亮的界面
  13. 关于CMS的那点事 I
  14. C语言基础:for循环演示源码,字符循环和浮点数循环
  15. SUSE Linux 网络配置
  16. 注塑工艺工程师视频教程 注塑机调机成型参数教程
  17. 百度搜索引擎排名规则,最新排名与优化的因素有哪些?
  18. 七甲川荧光染料IR820 NHS ester,新吲哚菁绿-活化酯,New Indocyanine Green-nhs ester
  19. 人人商城互动直播(与通信服务器连接失败)
  20. 《红色警戒3》简体中文完美整合版下载

热门文章

  1. 智能识别技术对电子警察设备的影响
  2. 从特殊到一般-C#中的类
  3. 图像坐标:我想和世界坐标谈谈(B)
  4. 最优化课堂笔记04:非线性规划(考点4-5例题)
  5. NMS(非极大值抑制)算法详解与示例
  6. c++ 遍历所有点且距离最短_编程小白暑期进阶笔记41-C语言数据结构与算法图遍历的应用...
  7. 计算机学业水平考试及格,信息技术学业水平考试表格部分试题(带答案)
  8. 修改了sql默认路径无法登录服务器,PostgreSQL错误'无法连接到服务器:没有这样的文件或目录'...
  9. 第4章 Python 数字图像处理(DIP) - 频率域滤波6 - 二维DFT和IDFT的一些性质 - 平移和旋转、周期性、对称性
  10. 为什么我的对象被 IntelliJ IDEA 悄悄修改了?