Mysql

mysql约束
主建:非空且唯一
uunique:列上不能有重复值
非空 not null 不能为空
外建约束:foreign key :用来搭建从表与主表的关系,用来与主表的主建产生关系,主表,用来约束别人的表,从表,用来被别人约束的表
或者多对多关系的表,第三张表,中间表中设置外建字段值指向主中的 主建
默认 default: 如果这一列子段没有值,使用默认值

Mysql优化:

1.做慢查询日志,定位查询效率较低的Sql,针对性的优化
2.选择创建一些合适的索引
普通索引:允许重复的值出现
唯一索引:(不能有重复的记录)
主键索引:是随着主键的创建而创建,也就是把某个列设为主键的时候,数据库就会给列创建主键引)
全文索引:用来对表中的文本域比如(varchar,text)进行索引,全文索引只针对Myisam有效,
3.选择何合适的存储引擎
MyISAM:存储引擎:(如果对事务要求不要,同时是以查询和添加为主的,我们考虑使用MyIsam存储引擎
比如说发帖表,发帖表主要做添加和查询,回复表)
INNODB存储引擎:对事务要求高,保存的数据都是重要数据,建议使用INNODB,比如说订单表(在操作的时候有很多
用户对订单表进行操作,所以事务要求高)
Memory:如果表中的数据是频繁变化的,
4.做mysql集群,然后去一些读写分离和负载均衡
5.做redis优化

数据库优化之分表:
水平分表(按行分表):如果mysql表的行非常多达到了百万级别,查询效率会很低,这时候就可以使用水平分表
垂直分表(按列分表):如果表中的某个字段的值非常多,比如文本字段,而且只有在很少的情况下才会去查询这个字段,这时候就可以把这些字段单独放到一个表中,然后通过外键关联起来。

数据库实现集群:
主从同步:改变数据库的操作都往主数据库中去些,而其他的数据库从主数据库中同步数据(主库些,从库来同步)

读写分离:可以使用负载均衡来实现数据库的读写分离。可以使用mycat的负载均衡策略(将写的操作都往主数据中去,读操作都往从数据库中去)

mysql事务的四大特性
原子性:事务要么同时成功,要么同时失败
一致性:事务执行前后必须从一个一致性状态变成另一个一致性状态。
隔离性:一个事务的执行不受另一个事务的干扰
持久性:事务一旦提交,数据就会被持久的保存。

mysql数据库查询速度慢,怎么优化查询语句?

1、首先可以考虑在经常需要where和order by为条件的列上建立索引,(效率提高)
2、写数据语句时尽可能减少表的全局扫描
3、减少sql语句中在where后面将null值作为条件判断(如果以null值为条件判断就导致引擎放弃索引)
4、尽量避免在where字句中使用!= 或者< > (因为如果使用了就导致引擎放弃了使用索引而进行全表扫描)
5. 尽量避免在wehre 字句中使用or来连接条件。(这样将导致引擎放弃使用索引进而全表扫描)
6.in 和 not in 也会导致全表扫描(比如 in(1,2,3,4) 和not in(1,2,3,5, ) )
7.尽量避免where字句对字段进行表达式操作,否则会全表扫描(比如:where age/4 =100;)

mysql在事务并发环境下的并发读问题:
脏读:在并发环境中,一个事务读取到了另一个事务未提交的数据,
不可重复读:同一条记录两次不同的时间内读取到的数据不一致。(原因在两次读取期间对数据进行了修改)
幻读:对同一张表两次读取到的数据不一致。(读取前和读取后的表记录数不一致,原因在两次读取的时候对数据进行了增删)

根据实际需求,通过设置数据库的事务隔离级别可以解决多个事务并发情况下出现的脏读、不可重复读和幻读问题,数据库事务隔离级别由低到高依次为Read uncommitted、Read committed、Repeatable read和Serializable等四种。我们这篇博客主要来分析 Serializable 这种事务隔离级别。

事务的隔离级别:共有4个,这四个隔离级别分别可以解决脏读不可重复读,幻读的行为
可以通过设置事务的隔离级别,调整事务的并发读问题:

读未提交:在一条数据被事务并发的环境下,一个事务可以读取到另一个事务未提交的数据。
读已提交:就是在一些数据在被事务并发的环境下,一个事务要等到另一个事务将这条数据提交后才能读取到数据。
可重复读:在一条数据被事务高并发的环境下,一个事务在读取数据还未结束的时候不允许其他事务对这个正在读取的数据进行修改操作。
串行化:要求事务序列化执行,事务只能一个接着一个地执行,不能并发执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值