【SQL语句】SQL书写过程中,影响SQL效率的因素
时 间:2013-11-18 12:33:12
作 者:nivenm ID:29828 城市:无锡
摘 要:效率,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群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)
- 【Access高效办公】上月累...(01.09)
- 【Access高效办公】上月累...(01.06)
- 【Access Inputbo...(12.23)
- 【Access Dsum示例】...(12.16)

学习心得
最新文章
- 32位的Access软件转化为64...(04.12)
- 【Access高效办公】如何让vb...(04.11)
- 仓库管理实战课程(10)-入库功能...(04.08)
- Access快速开发平台--Fun...(04.07)
- 仓库管理实战课程(9)-开发往来单...(04.02)
- 仓库管理实战课程(8)-商品信息功...(04.01)
- 仓库管理实战课程(7)-链接表(03.31)
- 仓库管理实战课程(6)-创建查询(03.29)
- 仓库管理实战课程(5)-字段属性(03.27)
- 设备装配出入库管理系统;基于Acc...(03.24)