Mysql优化,是什么,如何优化(一)

分享经验

以前的技术活都是有个师傅一把手教导,现在技术活只能靠自己去学习。我作为程序员,要把握两点,一是市场,二是实战技术。市场作为导向,而实战技术才是技术人员最大的财富。我经常会去看行业的招聘信息。因为那里可以看到市场需要技术人员的技术要达到什么程度,懂得什么技术。如果你懂了完全可以胜任,如果招聘信息上,你看不懂的技术,正是你要需要弥补的知识。

MySQL优化要从数据库设计、查询、索引、存储、搜索等方面优化考虑。

优化的思路:不查->少查->内存查->磁盘查->用索引->少排序

从设计上优化
1、遵从三范式建立数据表,分清楚实体,实体之间的关系,什么时候用外键,分表。
2、表优化,遵循以下原则

  • 定长变长分离
    定长指字段的字节不会变的字段一张表,变长指字段的字节会变多变少的一张表。例如,uid ,name,email 一张表,description 一张表,通过uid链表查询。
  • 常用字段和不常用的字段要分离(有点难度)
    需要结合网站具体业务来分析,分析字段的查询场景,查询频率低的字段,单拆出来。例如:列表页上是页面常用信息一个表,点击进去详细页的一个表。
  • 在1对多,需要关联统计的字段上,添加冗余字段
    例如:每个文章类发布多了多少篇。这个时候直接在文章类后面加上统计字段,每次增加一篇文章或者减少一篇文章直接操作字段,而不是文章的数据表中查询统计多少篇。
    3、字段优化
  • 字段类型优先级:整型>data,time>enum,char>varchar>blob,text 。
  • 字段的字节够用就行。
  • 尽量避免用null()。

从索引上优化

  1. 表中有两个索引,但是mysql的where语句只能用上1个。

  2. mysql查询的where语句跟索引的顺序有关。
    左前缀原则:以最左优先,按顺序where,当向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如索引index(a,b,c,d),a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。

  3. 理想的索引要求:查询频繁,长度小,区分度,尽量能覆盖常用查询字段

总结:列中的值,长度截的越短,重复度越高,区分度越低,索引效果越不好。长度截的越长,重复度越低,区分度越高,所用效果越好,但增删查改变慢影响查询速度。所以两者要取得平衡。

从查询上优化
explain +sql语句可以查看sql语句的情况,按照优化思路来优化查询语句,尽量用到索引就好。但是索引不是建的多就是好。打个比方一本书,目录很多重复,那一本书目录和内容占了很大的空间,消耗了很多资源。

从存储上优化
在mysql 建立存储函数调用,不利于维护,建议不用,除非专门有个dber负责。

从搜索上优化
1、查询关键字,在字段查询,只要在添加索引。
2、查询关键字,在内容里面查询,需要将内容,用sphinx(第三方索引插件)+mmseg(中文分词器)=coreseek。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值