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
    来源:知乎
原文地址:https://www.cnblogs.com/bneglect/p/10422397.html