当前位置:Gxlcms > 数据库问题 > sql优化

sql优化

时间:2021-07-01 10:21:17 帮助过:15人阅读

select id from user where name like ‘%abc%‘   模糊查询 like 后面第一个如果是一个通配符 % 的话,就会全表扫描. 如果是 name  like ‘abc%‘ 不会全表扫描,只会查询索引

 

(5)应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:

select id from t where substring(name,1,3)=‘abc‘--name以abc开头的id

应改为: select id from t where name like ‘abc%‘

 

(6)NOT

  我们在查询时经常在where子句使用一些逻辑表达式,如大于、小于、等于以及不等于等等,也可以使用and(与)、or(或)以及not(非)。NOT可用来对任何逻辑运算符号取反。下面是一个NOT子句的例子:

… where not (status =’VALID’)

如果要使用NOT,则应在取反的短语前面加上括号,并在短语前面加上NOT运算符。NOT运算符包含在另外一个逻辑运算符中,这就是不等于(<>)运算符。换句话说,即使不在查询where子句中显式地加入NOT词,NOT仍在运算符中,见下例:

… where status <>’INVALID‘;

对这个查询,可以改写为不使用NOT:

select * from employee where salary<3000 or salary>3000;

虽然这两种查询的结果一样,但是第二种查询方案会比第一种查询方案更快些。第二种查询允许Oracle对salary列使用索引,而第一种查询则不能使用索引。

以上都是对索引进行

 

sql优化

标签:font   nbsp   通配符   val   not   ike   优化   不能   字段   

人气教程排行