A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 安之啊 于 2017-11-14 20:32 编辑

数据库的优化

       相信大家在面试的时候经常被问到关于数据库的优化问题,相信大家也很困扰,一般都是少用like,子查询之类的回答。
今天就简单告诉大家我自己总结的数据库优化相关的知识:


首先数据库优化主要分为硬优化和软优化:
              硬优化主要是指针对数据库本身的优化(表和库)
              软优化主要就是针对sql语句之类的优化


先说说软优化(主要是sql语句优化):
    1,        查询条件尽量加索引
       a)      这个不是必须加的,但是在很大程度上能够解决一定查询效率的问题。但是需要注意的是不要在索引字段上做计算,
               用函数等操作。
    2,        少部分关键字的使用需要减少
       a)      避免在复杂的查询里面有like ‘%参数%’这样的形式,即少用到模糊查询,模糊查询完全可以在页面做成下拉框做选择。
       b)      NOT IN 这类也是非常浪费性能的,但是有的时候不可避免的会用到,只能建议少用,如果一定要用到可以用exit  not exit代替
       c)       *  这个禁止使用,虽然有的时候开发是很方便,但是效率极低,建议使用字段名来代替
       d)      其他的情况,例如id>2 和id>=3,在整数的情况下,这两个查询结果是一样的,但是效率肯定后者就大于前者了。
                >2需要去查询=2的情况,而>=3就不需要
    3,        减少子查询的使用
       a)      只有在业务复杂的时候我们会采用子查询,但是在复杂的业务都可以简单化,所以子查询我们完全可以拆分出来,
               先生成临时表,在做关联查询,这样就相对简单了
    4,        其他
       a)      减少对数据库的重复操作,能合并就合并。能一条sql语句解决就不要分多条
       b)      告诫大家一句,不要删除测试小姐姐的数据,不然就只能一辈子单身了
       c)       还有很多没写到的,希望大家自己慢慢总结。Sql语句的优化不是固定的,只要在特定的业务下能提高效率那么就是ok的。

以上只是简单的列举了一部分。


再说说硬优化:
    1,        拆表
       a)      在很多的情况下,某一张表某些个字段经常性的被查询到,那么我们就有必要来拆分一下表了
正如上面这张图片,在id,name,attr7,attr8,attr9常用的情况下,我们完全可以把这个表拆分成两张表通过id关联起来
    2,        分表
       a)      单表数据太多,查询的效率极慢的情况下我们可以把表里的数据分成几张表来存储
就如上图,我们每次查询一月份的数据的时候都要在全年度的表里去查询,数据量太大,查询会很慢。
所以我们将每个月份的数据单独提出来做成表,这样查询就相对比较快了
    3,        读写分离
       a)      读写分离,主要针对数据库访问的量很大,导致数据库运行可能宕机的问题。
                原理是添加几个数据库,形成集群将访问量平均分配到每个数据库上
如上图,我们只需要修改主库数据,通知到每个分库,从库更新之后。每次查询我们都将查询分配到每个从库就ok了。
    4,        数据库的优化还有针对引擎的优化,但是臣妾做不到啊。


最后,今天只是讲解了关于数据库优化的理论知识,后面有时间呢,会慢慢的更新如何搭建数据库集群,敬请关注,再见

勒是雾都!



5 个回复

正序浏览
1414225997 来自手机 中级黑马 2017-11-16 23:10:34
地板
6666666666
回复 使用道具 举报
围观一波
回复 使用道具 举报
66666666666
回复 使用道具 举报
6666666666
回复 使用道具 举报
666666666666
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马