MySQL学习心得

mysql的三种锁:

表锁:开销小加锁快,不容易出现死锁。缺点:并发低

行锁:开销大,加锁慢,容易出现死锁。优点:并发高

页面锁:开销和加锁时间介于表锁和行锁之间,会出现死锁。锁定粒度介于表锁和行锁之间。并发一般

Mysql的存储引擎

MYISAM

不支持事务,每次操作都是原子操作

支持表级锁,每次操作都是对表加锁

一个MYISAM 分为三个部分索引文件、数据文件、表结构文件

采用非聚集索引,索引文件的数据指向数据文件的指针。辅助索引和主索引一致

Innodb

支持ACID事务,支持事务四种隔离级别

支持行级锁及其外键约束,可以支持写锁并发

一个Innodb存储引擎,存储在一个文件空间(共享表空间,表达小不受空间限制,一个表可以存储在多个文件里)也可能为多个

(设置独立表,表大小受操作系统限制,一般为2G)受操作系统文件系统限制

主键索引采用的是聚集索引(索引的数据存储在文件本身)辅索引的数据域存储的主键的值,需要通过辅索引找到主键的值

再访问辅索引;最好采用自增主键,防止数据插入时,为维持B+树,造成文件的大调整

CHAR和VARCHAR的区别

CHAR长度为声明时的固定长度,会采用空格填充后面不足的数据检索时删除后面的空格

标准表最多能够创建16个索引

NOW() 表示年月日时分秒

CURRENT_DATE() 表示年月日

数据库如何优化

1、设计良好数据表结构,允许部分数据冗余,尽量避免Join的使用

2、选择适合的表字段类型和搜索引擎,适当的添加索引

3、主从分离,读写分离

4、找规律分表,提高查询速度

5、添加缓存机制 包括memcached、encache等等

6、不经常修改页面,生成静态页面

7、优化SQL语句

锁的优化策略

1、读写分离

2、分段加锁

3、减少锁的持有时间

4、多个线程尽量以相同的顺序来访问数据库

5、锁的细粒度化不需要太过了,容易造成线程不断地切换上下文,造成性能下降

在缺省模式下,MySQL是autoCommit模式的所有的数据库操作即时提交的所以在默认情况下mysql是不支持事务的

如果你想使用MySQL事务你必须设置autocommit=-0 这样mysql在非autocommit下工作,你必须使用commit来提交你的修改

什么情况下造成索引无法使用

以‘%’开头的like模糊匹配

Or语句前后没有使用索引

如何优化mysql

1、SQL语句优化和索引优化

2、数据库表结构优化

3、系统配置优化

4、硬件优化

优化数据库

1、使用连接JOIN来代替子查询

2、使用UNION来代替创建临时表

3、事务处理

4、锁表,优化事务

5、建立索引

6、优化SQL语句

索引

索引是一种特殊的文件,他们包含着对数据库所有数据指针引用

普通索引的唯一目的就是加快对数据的访问

普通索引允许索引包含重复的值,如果确定某个列只包含彼此各不相同的值,在为这个数据列创建索引的时候加UNION把它定为唯一性,主键是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于标识一条记录,用primary key来创建

索引也可以覆盖多个列index(columnA,columnB)

索引可以极大提高查询速度,但是会降低插入、删除的速度;

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值