【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)
- 根据变化的日期来自动编号的示例...(06.20)
- 【Access高效办公】按日期...(06.12)
- 合并列数据到一个文本框的示例;...(05.06)
- 通过命令按钮让Access列表...(04.24)
- 统计当月之前(不含当月)的记录...(03.11)
- 【Access Inputbo...(03.03)
- 按回车键后光标移动到下一条记录...(02.12)
- 【Access Dsum示例】...(02.07)
- Access对子窗体的数据进行...(02.05)

学习心得
最新文章
- 根据变化的日期来自动编号的示例;根...(06.20)
- Access快速开发平台--Acc...(06.16)
- 【Access高效办公】按日期区间...(06.12)
- Access快速开发平台--生成复...(06.07)
- 仓库管理实战课程(25)-导航菜单...(06.06)
- 仓库管理实战课程(24)-库存月结...(06.05)
- 分享一个简单的X氏家谱小示例(06.04)
- 仓库管理实战课程(23)-先入先出(06.02)
- 仓库管理实战课程(22)-代理商库...(05.30)
- 仓库管理实战课程(21)-安全库存...(05.28)