【SQL语句】SQL书写过程中,影响SQL效率的因素-nivenm
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> 综合其它


【SQL语句】SQL书写过程中,影响SQL效率的因素

发表时间:2013/11/18 12:33:12 评论(0) 浏览(2073)  评论 | 加入收藏 | 复制
   
摘 要:效率,SQL
正 文:

SQL书写过程中,影响SQL效率的因素
   
    昨天值班有位学员要查找某一列为空值的记录,一开始不会写,最终用 is null 来解决,可我下了班想想,用is null肯定会影响执行效率,于是找到这篇文章,与各位学员分享。。。

1.IS NULL与IS NOT NULL

   不能用null作为索引,任何包含null值的列都将不会被包含在索引中,即使索引有多列的情况下,只要这些列中有一列包含有null,该列就会从索引中排除。即如果某列存在空值,即使对该列建索引也不会提高性能。

2.对于连接列,即使最后的联接值是一个静态值,优化器是不会使用索引的。

3.带通配符(%)的like的语句。

如下语句:

   select * from A where name like ‘%name%’;

这里由于通配符(%)在搜索词首出现,所以oracle系统不使用name的索引,在很多情况下,可能无法避免这种情况。但是通配符如此使用会降低查询速度。当通配符出现在字符串其他位置时,优化器就能利用索引进行查询:select * from A where name like 'name%';

4.order by 语句

任何在order by 语句中的非索引项或者计算表达式都会降低查询的速度。

5.NOT

在查询时,经常在where子句中使用逻辑表达式,如大于、小于、等于以及不等于等等,也可以使用and(与)、or(或)以及not(非)运算符。即使不在查询where子句中显示的加入not词,not仍在运算符中,如下:

select * from A where price <>3000;

对于上面的查询可以改写为不使用not:

select * from A where price>3000 or price <3000;

虽然上面的查询结果一样,到那时第二种查询方案会比第一种查询方案更快一些,第二种允许对price使用索引。

6.IN和EXISTS

将一列和一系列值相比较,最简单的办法就是在where子句中使用子查询,在where子句中可以使用两种格式的子查询。

第一种使用In操作符:

where column in(select column from .. where ..);

第二种使用exists;

where column exists (select column from .. where ..);

相信绝大多数人会使用第一种形式,因为比较容易编写,而实际上第二种形式要比第一种形式效率高很多。在oracle中可以几乎将所有的in操作符子查询改为使用exists的子查询。


Access软件网交流QQ群(群号:198465573)
 
 相关文章
SQL各种写法的效率问题  【UMVsoft整理  2008/5/22】
用with提高循环效率  【学习者  2012/4/2】
如何写一个通用的T-SQL函数取得数字的小数部分  【赵文斌  2013/11/8】
Access中SQL语句规则  【jia  2013/11/12】
【Access文章】在VBA中写SQL语句时一些符号的问题  【缪炜  2013/11/15】
 
 访客评论
总记录:0篇  页次:0/0 9 1 :
 
 发表评论
评论内容 (必填)

常见问答
技术分类
相关资源
文章搜索
关于作者

nivenm

文章分类

文章存档

友情链接