简单SQL优化小记

1 篇文章 0 订阅
1 篇文章 0 订阅

简单SQL优化小记


http://www.douban.com/note/345871485

http://zhidao.baidu.com/link?url=udYO_-_r1EhdmKUJCx2o_R_uaysZuX6YHiJNSIfz_MYYozLTa7DBcQ5hdf6TJs04vFB9h3p174MGOq4PDaErQq


思路小记:避免使用模糊的匹配尽量匹配精确的值。


like,or,in,is null语句可能会全表扫描而放弃索引。

注:

  1. or语句在连接子条件时如果某一个条件没有索引那么所有将导致所有条件放弃索引,使用全表扫描。
  2. like语句在条件为"%..."时会放弃索引而全表扫描,而"...%"则走索引。


记:

  1. <>,!=也会引起全表扫描(不等于可以替换成or连接,例:x<>'zhy' 替换成 x<'zhy' or x>'zhy')。
  2. 避免在查询时对where语句的条件列参数进行计算或者函数运算,否则将导致全表扫描(等号'='的左边不要进行表达式计算)。
  3. 在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。
  4. 可以使用exists代替in语句。
  5. 创建索引会提高查询时的效率,但是会降低insert和update的效率。
  6. 更新时语句尽量只写经常更新的字段,不然会造成开销浪费还会生成很多不必要的日志。
  7. 建表时尽量使用数字型的字段,少用字符型字段。
  8. 尽可能的使用 varchar/nvarchar 代替 char/nchar ,因为首先变长字段存储空间小,可以节省存储空间,其次对于查询来说,在一个相对较小的字段内搜索效率显然要高些。
  9. 避免使用select *,要把所需要的字段一一列全。
  10. 少使用临时表。
  11. 在新建临时表时,如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
  12. 尽量先分页再JOIN。
  13. 使用select count(column)代替select count(*)(后者是全表扫描)。
  14. count(*) 跟 count(1) 的结果一样,都包括对NULL的统计,而count(column) 是不包括NULL的统计。
  15. MySQL认为符合条件的记录在30%以上,它就不会再使用索引,因为mysql认为走索引的代价比不用索引代价大,所以优化器选择了自己认为代价最小的方式(注意是认为,是MySQL的估算预期)。


例:

select column from table_a where p=1 or p=2;

可优化为:

select column from table_a where p=1

union all

select column from table_a where p=2;

union all语句会保留两个查询结果的所有记录,union语句则会去重。


例:

select column from table_a where p in (3,4,5);

可优化为:

select column from table_a where p between 1 and 3;


例:

select column from table_a where p/100=2;

可优化为:

select column from table_a where p=100*2;


例:

select column from table_a where p in (select column from table_b);

可以优化为:

select column from table_a a where exists(select 1 from table_b where column=a.column);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值