zoukankan      html  css  js  c++  java
  • Mysql语句优化建议

    一、建立索引

      1)考虑在 where 及 order by 涉及的列上建立索引

      2)对于模糊查询, 建立全文索引

      3)对于多主键查询,建立组合索引

    二、避免陷阱

    然而,一些情况下可能使索引无效:

      1)在 where 子句中对字段进行表达式操作

      2)在 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

      3)在 where 子句中的“=”左边进行表达式运算(可能导致无法正确使用索引)

      4)在where 子句中使用参数,如:

    select id from t where num=@num

      可以改为(强制使用索引):

    select id from t with(index(索引名)) where num=@num

      5)如果该索引是组合索引,那么必须使用到该索引中的第一个字段作为查询条件, 而且尽可能让字段顺序与索引顺序一致

      6)并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引

    三、语句优化建议

      1)慎用in 和 not in, 如:

    select id from t where num in(1,2,3)

      可以替代为:

    select id from t where num between 1 and 3

      2)用具体字段代替*

      3)少用VARCHAR、 TEXT、BLOB类型

      4)字段表示固定值, 使用ENUM类型代替varchar(内部使用TINYINT)

      5)尽可能的使用 varchar/nvarchar 代替 char/nchar (变长字段存储空间小,节省存储空间,对于查询来说,在一个相对较小的字段内搜索效率显然要高些)

      6)如果类型不限制, 用int代替varchar(字符串一个个被匹配, 而数值则一次被处理)

      7)避免频繁创建和删除临时表,以减少系统表资源的消耗

      8)避免频繁创建和删除临时表,以减少系统表资源的消耗

      9)尽量避免大事务操作,提高系统并发能力

    四、使用工具

      1)任何优化都是基于数据基础的。

      2)比较语句执行时间, 必要时使用Explain来跟踪查询情况

  • 相关阅读:
    osds have slow requests
    supervisor 管理 celery
    guacamole部署
    openstack IPV6
    修复VSAN无法看到主机磁盘
    kolla之docker私有仓库创建
    CSS日食与太阳碰撞
    vue-devtools必备工具
    VUE在BODY上绑定enter事件
    VUE输入框显示时自动聚焦
  • 原文地址:https://www.cnblogs.com/Hughzm/p/5176749.html
Copyright © 2011-2022 走看看