sql优化那些事

写一条sql语句,不仅要实现功能,最主要的是要进行有效率的查询。前两天看了好多关于SQL优化的,现在就来总结一下。

一、建表的时候

1、合适的建立索引

  索引可以提高select查询的效率,但是会降低insert及update的效率。

2、尽量避免在数据库中有null字段(该字段可以用0&1代替)

  where子句中对字段进行null判断,会让引擎放弃使用索引而进行全表扫描,降低效率。

select id from t where num is null

3、尽量使用数值型字段

  确定某字段只含数值信息的,尽量不要设计为字符型,这会降低查询和连接的性能。

二、SQL语句

1、尽量避免在where子句中使用!=或<>操作符

    这两个符号会让引擎放弃索引而进行全表扫描。

2、应尽量避免在where子句中使用or来连接条件。

  如果一个字段有索引,一个字段没有索引,会导致引擎放弃使用索引而进行全表扫描。

select id from t where num=10 or Name='admin'

   可以写成:

select id from t where num=10
union all
select id from t where Name='admin'

3、使用in和not in 也会导致全表扫描,如:

select id from t where num in(1,2,3)

  连续的数值的话可以用between代替in:

select id from t where num between 1 and 3

  或者有时候用exists代替in:

select num from a where num in(select num from b)
--->
select num from a where exists(select 1 from b where num=a.num)

4、where子句使用参数也会全表扫描,如:

select id from t where num=@num

  可以改为强制查询使用索引

select id from t with(index(索引名))where num=@num

5、where子句中对字段进行表达式操作或函数操作,也会导致全表扫描

//表达式操作
select id from t where num/2=100
-->
select id from t where num=100*2

//函数操作
select id from t where sunstring(name,1,3)='abd'
-->
select id from where name like'abc%'

 

评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值