码迷,mamicode.com
首页 > 数据库 > 详细

sql 优化方法

时间:2018-03-01 11:42:03      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:否则   justify   表达式   auto   card   port   扫描   表达   exist   

(1)Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。---  需要按照顺序进行一级一级的筛选

(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。

    exists 条件 返回的 是boolean型  只有 true 或者 false; 所以在exists 中的id 条件 应该是 外查询的查询id

    SELECT * FROM alumni_info t WHERE EXISTS(SELECT a_id FROM alumni_education e WHERE t.id_=‘6588‘ ),

  xeg:SELECT * FROM alumni_info t WHERE EXISTS(SELECT a_id FROM alumni_education e WHERE e.a_id=‘6588‘ ),返回的结果跟SELECT * FROM alumni_info t一样(a_id=6588存在),因为select语句先执行where条件后的语句,再筛选字段,当执行完where条件后,若这条结果集存在,则where表达式后面永远都是true,否则为false。也就是说要么查询所有,要么没有数据。

    卡券项目中我想查询卡券发行数量超过100张的卡券信息:   

    select * from wechatcarden wc where exists (select * from wechatcardsummary w where wc.id = w.weChatCardEnId and  skuQuantity>= 1000 )

等价于:select * from wechatcarden uw left join wechatcardsummary  ws on uw.id = ws.weChatCardEnId where ws.skuQuantity >= 1000

(3) 避免在索引列上使用计算

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

(5)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。  

(6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描

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

sql 优化方法

标签:否则   justify   表达式   auto   card   port   扫描   表达   exist   

原文地址:https://www.cnblogs.com/JdsyJ/p/8487131.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!