Skip to main content

mysql预处理的作用?

在一定程度上可以提高程序运行效率;

普通的SQL语句每次都需要经过词法和语义解析,优化SQL语句并制定执行计划,对于多次执行相同SQL语句的情况,MYSQL预处理省去解析优化过程,提高运行效率。

另外预处理可以防止客户端SQL注入。


自旋锁

不会放弃CPU时间片,而是通过自旋等待锁的释放,也就是说,它会不停的尝试获取锁,如果失败就再次尝试,直到成功。

让线程始终处于Runnable状态,节省线程状态切换带来的开销。


mysql事务隔离级别

读未提交

读已提交

可重复读 (mysql默认)

序列化


mysql主从复制的原理

  1. 主库必须开启二进制日志
  2. 当有增删改的语句时,会记录到主库的binlog日志中
  3. 主库通过IO线程把binlog里面的内容传给从库的relay binlog(中继日志)
  4. 从库的sql线程负责读取它的relay binlog里的信息并应用到数据库中。

explain执行计划

type: 本次查询表连接类型

key:最终选择的索引

key_len: 本次查询用于结果过滤的索引实际长度

rows: 预计需要扫描的记录数

extra: 额外附加信息


mysql分库分表

水平分库

以字段为依据,按照一定策略(hash, range等),将一个库中的数据拆分到多个库中。

垂直分库

以表为依据,按照业务归属不同,将不同的表拆分到不同的库中。

mysql数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?

  1. 设计良好的数据结构,允许部分数据冗余,尽量避免join查询,提高效率。
  2. 设计合适的表字段数据类型和存储引擎,适当的添加索引。
  3. mysql库主从读写分离。
  4. 找规律分表,减少单表中的数据量提高查询效率。
  5. 添加缓存机制。
  6. 书写高效率的sql。

锁的优化策略

  1. 读写分离
  2. 分段加锁
  3. 减少锁持有的时间

索引的底层实现原理

B+树

在所有的叶子节点增加了指向下一节点的指针。