• mysql优化(下)


    1. 优化SQL语句:
      (1)不要使用   select  *
      (2)尽量在where字段上添加索引;
      (3)模糊查询中%前置不能使用索引,比如  like ‘%a’;
      (4)使用or语句时,两侧语句都有索引时才使用索引;
      (5)分组优化,对于分组的数据,mysql会自动对数据进行排序,可以强制其不排序,提高速度。就是在语句中加上 order  by   null;
      (6)分页优化
    2. 表分割:水平拆分和垂直拆分。
      (1)水平拆分:举个例子,比如博客分类,可以按照日期来分17年、18年、19年,查询的时候可以按照年份日期来查表。有很多方法,再比如:按照余数来分。假设有100万个顾客,他们每个人都有编号,我们就可以创建10张表,按照编号对10取余,第一个顾客存到表一中,第二个存表二·······第十个存表十,然后11存表一··········以此类推。
      (2)垂直拆分:按列分,把字段分开,常用的字段放一张表,不常用的放一张表,就像用户信息,存一张主表和一张附表。主表存经常查询的信息,附表存放不经常使用的信息。
    3. 主从复制:主服务器(用来写操作)和从服务器(用来读操作)分工合作。
    4. 中文分词(注意全文索引不支持中文,支持英文):
    5. 其他技巧:
      (1)插入数据时候不要循环插入;
      (2)不要讲图片存入数据库,应该吧路径存入数据库;
      (3)伪删除:不真正删除数据,通过一个字段来标示是否删除;
      (4)定期执行optimize  table整理碎片;
      (5)analyze table 优化语句的执行计划,提高查询效率;
      (6)尽量避免使用null,会增加额外的字节标注,可以使用默认值;
      (7)缓存。 
    6. 命令查看索引:https://www.cnblogs.com/tianhuilove/archive/2011/09/05/2167795.html
    7. 可是我确实需要两个表里的数据链接在一起啊,我们可以做个冗余,建表的时候,就把这些列放在一个表里,比如一开始有student(id, name),class(id, description),student_class(student_id, class_id)三张表,这样是符合数据库范式的(第一范式,第二范式,第三范式,BC范式等),没有任何冗余,但是马上就不符合“编程规范“了,那我们可以用一张大表代替它,student_class_full(student_id, class_id, name, description),这样name和description可能要被存储多份,但是由于不需要join了,查询的性能就可以提高很多了。

      任何的规范都是在特定情况下的某种妥协,脱离了这个环境,就不一定成立了

      作者:李晨曦
      链接:https://www.zhihu.com/question/56236190/answer/153450286
      来源:知乎
  • 相关阅读:
    Java8集合框架——集合工具类Collections内部方法浅析
    Java8集合框架——LinkedHashSet源码分析
    Java8集合框架——HashSet源码分析
    Java8集合框架——LinkedHashMap源码分析
    Spring源码分析(001)——环境搭建
    SpringBoot2(007):关于Spring beans、依赖注入 和 @SpringBootApplication 注解
    SpringBoot2(006):关于配置类(Configuration Classes)和自动配置(Auto-configuration)
    SpringBoot2(005):关于工程代码结构的建议
    SpringBoot2(004):关于 Build Systems (构建系统)
    html中的dl,dt,dd标签
  • 原文地址:https://www.cnblogs.com/bneglect/p/10422397.html
Copyright © 2020-2023  润新知