Mysql数据库优化之简单易懂

相信大家都用过Mysql了,但是对于它的优化可能和我一样还不是很了解,SO 接下来我们一起来学习关于如何优化Mysql吧!

1Mysql设计优化:
1.1最首先就是存储引擎的选择:
这里就写出最常见的两种最常见的引擎,首先来讲讲它的差异,再结合它们各自的优缺点,讲解它们的使用场景!
(1)是否支持数据库的ACID事务&行级锁和外键的约束:
------------------------为了大家更好的理解,这里说一下什么是行级锁,所谓行级锁,说白了就是对数据表中行的一种锁,是Mysql中粒度最小的一种锁,其可以大大减少数据操作的冲突,在Innodb的行级锁有共享锁和排他锁,共享锁允许事务读一行记录,不允许任何线程对该行记录进行修改。排他锁允许当前事务删除或更新一行记录,其他线程不能操作该记录。

Innodb引擎提供了对数据库ACID事务的支持,并且提供了行级锁和外键的约束,可以处理大数据容量的数据库。
MyIsam引擎不支持事务的支持,也不提供行级锁和外键的约束。
(2)是否支持保存表的行数
Innodb引擎不支持保存表的行数,导致在执行查询语句的时候,需要进行全表扫描。
MyIsam引擎支持保存表的行数,在进行查询语句的时候,可以直接读取已经保存的值,而不需要进行全表扫描,读操作比其Innodb会快很多。
总结用途:
根据以上差异,所以
Innodb引擎更适合用于大容量的数据,适合并发访问量大,写操作比较多,且应用支持可以利用数据日志来进行数据的恢复,
MyIsam引擎更适合并发访问量小时,读多写少时使用
另外,这两个数据库引擎都是B+树结构!

1.2命名规则
多数开发语言的命名规则:比如MyName
多数开源思想命名规则:my_name

1.3字段类型
根据需求选择合适的字段类型,并同时以最小的原则给该字段进行分配

1.4Varchar和char的选择
首先说说其区别:
长度是否固定:Varchar存取的数据内存是可变的,而char存取的数据内存是不可变的,例如varchar(10)存入chen,其长度会变为4,但是char(10),存入chen,其长度依然是10,。
存取速度:char比Varchar快,是因为其长度是固定的,不用进行削减操作,同时这也就导致char相对varchar来说,占用内存多。且在char中取出数据的时候,需要执行trim()操作将多余的空间去除,而varchar是不需要的
存储方式:char对英文字母和数字占用一个字符,对一个汉字占用两个字节,而varchar的存储方式是,对每个英文字符占用两个字节,汉字也占用两个字节,
根据以上差异来决定其使用场景:
对于列数据项的大小一致,或者相差不大,则使用char
对于列数据项的大小差异相当大,则使用varchar

1.5主键选择原则:
(1)主键是经常要被使用到的键,所以主键字段类型要尽可能的小,能使用SMALLINT就不要使用INT,能使用TINYINGT就不要使用SMALLINT。
(2)尽量保证不对主键字段进行更新修改,防止主键字段发生变化,引发数据存储碎片,降低IO性能。
(3)主键不应该包含,动态变化的数据。
(4)通常将主键放在数据表的第一顺序

1.6NULL
(1)尽可能将每个字段设置为not null,除非有其他特殊字段:
使用含有NULL列做索引的话会引起更多的磁盘空间,因为索引NULL列,需要额外的空间来进行保存,进行比较的时候,也会非常复杂
含有NULL的列比较特殊,SQL难以优化,

二索引
优点:极大的加速了查询,减少扫描和锁定的数据行数
缺点:占用了磁盘空间,一般来说,索引表占用的空间是数据表的1.5倍,减慢了数据更新速度,增加了磁盘IO。
所以我们在添加索引的时候,有如下原则:
1选择唯一性索引
2为经常需要排序,分组和联合操作的字段建立索引
3为经常用作查询的字段添加索引
4尽量使用数据量少的索引
5定期删除不再使用或很少使用的索引

同时使用时还需要注意以下几点:
1like语句操作,
一般情况下,不支持使用like进行查询,除非费用不可,例如 like “%chen%” 这种情况下是不会使用索引的,“chen%”这种情况下才会使用索引

2不要在列上进行运算:
例如 select sno from student where age>20,这个操作将会在每个行上进行比较操作,这也会导致索引失效,而进行全表扫描

3查询尽可能使用limit减少返回的行数,从而减少数据传输时间和带宽的浪费

4避免隐式转换,例如字符串一定要用’ ‘,数字型一定不要使用’ '.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值