MYSQL (优化==开发)-方案:硬件,内存,性能

先重点总结下优化方案,感觉萌萌往下看:

实现优化:

1.数据库设计要合理--细讲哟;

2.添加索引(普通,主键,唯一,全文索引)----细讲哟;

3.分表分库技术(取模分表,水平分割,垂直分割)---细讲哟;

4.读写分离---细讲哟;

5.存储过程的使用---细讲哟;

6.配置文件:如 mysql的最大连接数---细讲哟;

7.mysql服务器升级;

8.随时清理碎片化---细讲哟;

9.sql语句优化--细讲哟;


一:关于数据库的设计:

看文章书籍上有介绍数据库设计,但其实是都没有具体的解决方案,有的只是多种解决思路,因为这个收业务产品制约,今天只说两点:

1.减少冗余量(量:指业务 ,看业务情况分析最重要);

2.尽可能的遵从三范式:

原子约束,保证唯一,减少冗余数据;

二:分库分表:

什么时候分库:

最典型的电商服务架构,将一个项目拆分成多个小项目,每个小项目有自己的单独数据库,互不影响,垂直分割:如 会员数据库,订单数据库,支付...等;

什么时候分表:

更具有业务需求,如 存放日志,根据年份分割...等;

怎么分割:年份?  位数?    市场上大流行取模算法,这种比较均匀分配;

不过,分表相对来说是有缺点的,如  分页查询,查询会受到一定的限制,当然也有解决方案,如 建视图(后续关于视图会补充说明的);

一般分为主次表:主表存放所有数据,根据 业务需求分表;

三:索引,这块身为开发人员应该都是有所涉及;

    首先索引的目的就是提高查询效率,可以负责任的说,就这一条,但就够了,前面文章有统计 mysql,redis,Elasticsearch,kafka等这些在同一环境下操作数据的时间上的效率及差距对比,感兴趣的话可以看下,当然适合产品本身的才是最好的  ,数据并不能代表什么,需要从多方面考虑;

索引的实现原理是折半原理,底层采用的是b-tree,这种有很多相似的,比如二分查找大家应该都用过,这种作用就是减少对数据库的全表扫描,进而提高查询效率;

这几张图片不用多说,大家都应该可以比较出来,自上而下其实就是 从查询到组织数据存储的;

    当然,很多人说索引没有缺点,或者说是看不到缺点,又或者说查询快增删慢,没错,对数据进行增删改时确实慢,那慢的原因体现在哪?

几个字回答就是:加索引会生成索引文件,每次做增删改时回去更新索引文件,当数据量小时看不出来,数据量大时也是个隐患呢,后续文章会讲如何尽可能规避这一风险,一起交流哟;

索引的注意事项:

注意事项主要是从在哪些方面下是不能够通过索引进行查询的,也就是说索引是不会生效的:

1.组合索引注意事项:

将两列设为一个索引,

第二列不用,第一列作为条件一起查询,不会使用组合索引;

2.很多人都说使用索引时不能使用like,但其实说的并不规范,是不能够使用  %like%这种,对于开头不是% 的like其实还是可以使用索引进行扫描的,不信的话可以测试下哟,亲测生效;

3.使用 or,条件必须都加索引,其中一个不加索引则查询不会使用索引;

4.判断是否为null,用 is null  haishi 用 =null呢.说明:=null不会采用索引查询;

5.group by 分组,不会采用索引,会全表扫描,包括默认排序哟(可以关闭);

6.关于 >=   ,这块我们可以用编程思想的角度来考下,>=100 和>101 那个更省内存的,大家应该比较出来了吧;

7.in  ,not in 不会索引扫描;

8.查询量很大时,缓存,分表,分页 都是注意事项;

注:在这块中,如何判断查询是否使用的是索引查询还是全表扫描查询呢,我们可以根据 explain进行执行任务,答案很是明显,后续的话会对explain进行具体实例说明,感兴趣的话可以留言一起交流哟.

        关于索引底层原理,存储过程的使用,sql详细调优,mysql的碎片化清理,mysql的高可用,主从复制,读写分离,反向代理等,后续都会和大家以实例项目的方式出现的,有兴趣可以一起沟通;


本篇文章到此结束了,感谢您的观看,精彩持续进行中......






免责声明:

1、本站资源由自动抓取工具收集整理于网络。

2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。

3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。

4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。

5、如果您喜欢本资源,请您支持作者,购买正版内容。

6、资源失效,请下方留言,欢迎分享资源链接

文章评论

0条评论