您的位置:首页 > 数据库

SQL优化技巧和索引的认识

2013-04-27 09:43 281 查看
现在简单的举几个例子

Where子句中有“!=”将不使用索引

select account_name from test where amount != 0 (不使用)

select account_name from test where amount > 0 (使用)

Where条件中对字段增加处理函数将不使用该列的索引

select * from emp where to_char(hire_date,'yyyymmdd')='20080411' (不使用)

select * from emp where hire_date = to_char('20080411','yyyymmdd') (使用)

避免在索引列上使用IS NULL和 IS NOT NULL

select * from emp where dept_code is null (不使用)

select * from emp where dept_code is not null (使用)

通配符% 的使用

select * from emp where name like '%A' (不使用索引)

select * from emp where name like 'A%' (使用索引)

在含有子查询的SQL语句中,要特别注意减少对表的查询.例子:

SELECT EMP_NO FROM EMP WHERE (GROUP,NAME) = ( SELECT

COLUMN1,COLUMN2 FROM TEST WHERE TEST_ID = 604)

最高效的删除重复记录方法 ( 因为使用了ROWID)例子:

DELETE FROM EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID)

FROM EMP X WHERE X.EMP_NO = E.EMP_NO);

sql语句用大写的;因为oracle总是先解析sql语句,把小写的字母转换成大写的再执行

在java代码中用到preparedStatement的時候尽量少用连接符“+”连接字符串!

可以通过建立反向索引..让

select * from emp where name like '%A'

也使用索引 好像我們一般不用反向索引 再説 reverse索引一般用于ops环境

另外如果建立了组合索引 但是where查询条件字段只有组合索引字段其中一个 索引应该也不使用

原地址:http://www.javaeye.com/topic/181544
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: