SQL查询效率注意事项小结

来源:asp之家 时间:2012-01-05 19:31:25 

一、查询条件精确,针对有参数传入情况

二、SQL逻辑执行顺序

  FROM-->JOIN-->WHERE-->GROUP-->HAVING-->DISTINCT-->ORDER-->TOP

三、横向

查询需要的字段
当在SQL语句中连接多个表时,请使用表的别名并把别名前缀于每个Column上这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误
四、少做重复工作

控制同一语句的多次执行,特别是一些基础数据的多次执行是很多程序员很少注意的
减少多次的数据转换
杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销
五、关于零时表#与表变量@

如果语句很复杂,连接太多,可以考虑用临时表和表变量分步完成
如果需要多次用到一个大表的同一部分数据,考虑用临时表和表变量暂存这部分数据
如果需要综合多个表的数据,形成一个结果,可以考虑用临时表和表变量分步汇总这多个表的数据
关于临时表和表变量的选择,在数据量较多的情况下,临时表的速度反而更快
SELECT INTO会比CREATE TABLE + INSERT INTO的方法快,但是SELECT INTO会锁定TEMPDB的系统表SYSOBJECTS、SYSINDEXES、SYSCOLUMNS,在多用户并发环境下,容易阻塞其他进程
六、子查询

子查询可以用IN、NOT IN、EXISTS、NOT EXISTS引入
NOT IN、NOT EXISTS的相关子查询可以改用LEFT JOIN代替写法
如果保证子查询没有重复 ,IN、EXISTS的相关子查询可以用INNER JOIN 代替
IN的相关子查询用EXISTS代替
七、索引

避免对索引字段进行计算操作
SELECT ID FROM T WHERE NUM/2=100
应改为:
SELECT ID FROM T WHERE NUM=100*2
避免在索引字段上使用NOT,<>,!=
避免在索引列上使用IS NULL和IS NOT NULL
避免在索引列上出现数据类型转换
避免在索引字段上使用函数
避免建立索引的列中使用空值
不要对索引字段进行多字段连接
WHERE FAME+'. '+LNAME='HAIWEI.YANG'
应改为:
WHERE FNAME='HAIWEI' AND LNAME='YANG'
八、多表连接

多表连接的时候,连接条件必须写全,宁可重复,不要缺漏
连接条件尽量使用聚集索引
九、其他

在可以使用UNION ALL的语句里,使用UNION ALL
避免在WHERE子句中使用IN,NOT IN,OR
避免使用耗费资源的操作,带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎执行,耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序
LIKE ‘%5400%' 这种查询不会引用索引,而LIKE ‘X5400%'则会引用范围索引。

标签:SQL,查询效率
0
投稿

猜你喜欢

  • python中@contextmanager实例用法

    2021-07-18 18:19:11
  • Python求两点之间的直线距离(2种实现方法)

    2021-03-28 19:24:46
  • 巧妙使用python opencv库玩转视频帧率

    2023-02-01 13:54:30
  • python 实现简单的计算器(gui界面)

    2022-11-14 14:35:14
  • Python列表删除的三种方法代码分享

    2022-10-26 19:13:35
  • Python完成毫秒级抢淘宝大单功能

    2023-09-29 04:14:54
  • Python中函数带括号和不带括号的区别及说明

    2023-01-23 05:23:28
  • asp下去除超链接的函数

    2011-03-29 11:11:00
  • Oracle删除字段中的空格、回车及指定字符的实例代码

    2024-01-18 18:10:07
  • Python科学画图代码分享

    2023-08-19 07:06:25
  • django 通过URL访问上传的文件方法

    2022-09-02 22:03:59
  • 如何正确合理的建立MYSQL数据库索引

    2010-10-25 20:08:00
  • Vscode的SSH插件远程连接Linux的实现步骤

    2023-09-07 17:57:11
  • Python实现二叉树前序、中序、后序及层次遍历示例代码

    2023-12-02 00:36:40
  • 程序员鼓励师插件Rainbow Fart(彩虹屁)

    2023-02-11 23:02:40
  • Python创建xml的方法

    2021-11-25 05:59:44
  • Python调用两个机器人聊天的实战

    2021-09-30 23:10:52
  • sql 存储过程批量删除数据的语句

    2012-08-21 10:24:14
  • Python Counting Bloom Filter原理与实现详细介绍

    2021-04-04 19:01:54
  • 三层级联动的日期选择下拉框javascript源码

    2013-08-15 16:50:40
  • asp之家 网络编程 m.aspxhome.com