ITKeyword,专注技术干货聚合推荐

注册 | 登录

常见sql语句效率优化方式

分享于 2015-12-09

推荐:数据库性能优化-SQL语句优化

一、问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统

2018阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=gh9qh5ki&utm_source=gh9qh5ki

一、“like '%%'”的优化,建议使用instr(?,?)效率高

单表有超大数量级的数

1、oracle和mysql中

如果有索引的情况下,使用like 'aa%'或者like '%aa'效率较高,因为如果是like "%aa%"那么会导致全表扫描!效率非常低!

如果没有索引,那么最好使用instr(stpm,字符串)函数解决问题

举例:

select  * from xslsb where spmc like '%毛线%';               //效率很低

        select * from xslsb where (instr(spmc,'毛线'))>0;    //效率高

2、sql server中

2005以后,采用contains(spmc,'毛线')函数

 

二、批量插入

如果一条一条插入,那么效率很低

insert into t_user values(?,?,?);

所以采用批量

insert into t_user select * from t_user2;

其他延伸:t_user 表字段要和t_user2字段的结构和名称一致

三、exists和in的效率

exists相对较高,适用于外表小,内表大的情况

        select  * from  外表小  where exists( select * from  内表大);

       in相对较低,适用于外表大,内表小的情况

select  * from  外表大  where  字段  in (select  字段  from   内表小);

如果内表和外表差不多,那么exists和in效率差不多!

四、对查询的条件添加索引

1、mysql 

     create index t_user_index on t_user(username);

     drop index t_user_index on t_user;                         --删除索引

 

2、oracle

     create index t_user_index  on t_user(username);

推荐:SQL Server数据库性能优化之SQL语句篇

      近期项目需要,做了一段时间的SQL Server性能优化,遇到了一些问题,也积累了一些经验,现总结一下,与君共享。SQL Server性能优化涉及到许多方面,如良好

     drop index t_user_index;                                         ---删除索引

五、使用union all 而少用union

union all执行的内部机制少

union 在表联合查询后还会进行筛选操作,费时!

 

六、连续值查询

1、使用between and

原因:不会全表查询 

2、不使用in()

原因:导致全表查询,效率低

 

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

select id from t_user where substring(name,1,3) = 'abc'       -–name以abc开头的id

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

 

八、尽量避免大事务操作,提高系统并发能力。

 

九、跨oracle用户访问


select count(*) from (select hykh from user.tablewhere  scsj>=to_date('2015-11-01','yyyy-MM-dd') group by hykh);

user代表用户

table代表user中的table表

 

十、创建临时表可以提高查询速度

如果在1000万的数据中查询结果,那么以下第二种查询效率会高很多倍!

(1)select * from t_user where name='suns';

(2)select * from t_user tu,user us where   tu.id=us.id and  us.name='suns';


十二、使用mysql 的扩展语句replace into 与insert into 的注意

1、insert into 效率低,但是通用性能很好

2、replace into 效率高  ,但是如果表中有自增长的主键,那么一定要谨慎选择使用,因为如果主键的增长id一旦达到最大后就无法继续增长了!


 

推荐:数据库性能优化之SQL语句优化

http://my.oschina.net/xianggao/blog/75514 温馨提示:涉及到相关的数据库性能优化时,用于查阅,仅当做以后不备之需,如若你喜欢可尽情转走。 一、问题的提出

一、“like '%%'”的优化,建议使用instr(,)效率高 单表有超大数量级的数 1、oracle和mysql中 如果有索引的情况下,使用like 'aa%'或者like '%aa'效率较高,因为如果是like "%aa%"那么会导致
在线网页数据采集器

相关阅读排行


用户评论

游客

在线网页数据采集器

相关内容推荐

vivo京东自营官方旗舰店

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。