zoukankan      html  css  js  c++  java
  • SQL优化经验

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

    2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null

    可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0

    3.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。

    4、应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
    select id from t where num=10 or num=20

    可以这样查询:
    select id from t where num=10
    union all
    select id from t where num=20

    5.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

    6.以%开头的like无法使用到索引
    SELECT * FROM t WHERE name LIKE '%de%'; #无法使用到索引
    SELECT * FROM t WHERE name LIKE 'de%'; #使用到索引

    7、很多时候用 exists 代替 in 是一个好的选择

    8、尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。

    9、字段使用函数,将无法使用索引
    例:SELECT * FROM t WHERE YEAR(d) >= 2016;
    由于MySQL不像Oracle那样支持函数索引,即使d字段有索引,也会直接全表扫描。
    应改为-->SELECT * FROM t WHERE d >= '2016-01-01';

    http://www.cnblogs.com/linjiqin/p/5714567.html

  • 相关阅读:
    Java后端知识体系
    HashMap底层实现整理
    Java线程池
    Spring Boot+Dubbo 入门
    Go 代码记录(一)
    Servlet 复习
    Spring Cloud(二)Eureka:服务注册与发现
    Spring Cloud (一)概述
    数据结构基础知识
    容器技术-Docker入门
  • 原文地址:https://www.cnblogs.com/linjiqin/p/5757360.html
Copyright © 2011-2022 走看看