sql 优化方法

Posted 迷失在路上

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 优化方法相关的知识,希望对你有一定的参考价值。

(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 优化方法的主要内容,如果未能解决你的问题,请参考以下文章

面试 - SQL优化方法

SQL 优化

列举sql优化都有哪些方式方法 博客园

sql server都有哪些查询优化方法

SQL 优化方法论

如何优化SQL语句