进学阁

业精于勤荒于嬉,行成于思毁于随

0%

MySQL官方对索引定义:是存储引擎用于快速查找记录的一种数据结构。需要额外开辟空间和数据维护工作。

  • 索引是物理数据页存储,在数据文件中(InnoDB,ibd文件),利用数据页(page)存储。
  • 索引可以加快检索速度,但是同时也会降低增删改操作速度,索引维护需要代价。

索引涉及的理论知识:二分查找法、Hash和B+Tree。

阅读全文 »

事务的四大特性

  1. 原子性(Atomicity) 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
  2. 一致性(Consistency) 一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
    阅读全文 »

SQL通用语法

  • SQL语句可以单行或多行书写,以分号结尾。
  • 可使用空格和缩进来增强语句的可读性。
  • MySQL数据库的SQL语言不区分大小写,关键字建议使用大写,对所有列和表名使用小写,这样做使代码更容易阅读和调试。
  • 3种注释:
    阅读全文 »

  1. 没有遵从最左原则:因为常用的索引是B+树结构的,而B+树是有序的,而这个有序是根据索引最左边的字段排序的,所以相对的组合索引中其他的字段并不是有序的
  2. 范围查询放在最后(这里需要注意并不是在写语句的时候讲范围查询放在最后,而是将索引字段中可能出现范围查询的字段放在最后)
  3. 使用select from table 聚合索引和非聚合索引的差距就在于聚合索引的根保存的是完整的数据,而非聚合索引保存的是索引的值+聚合索引的Key,所以这里就引出了覆盖索引的概念,当你搜索的值都是索引列,就会用到覆盖索引,直接返回结果,不用再使用聚合索引的key去回表查询,效率就会有所提高。select * 大概率是要回表的。
  4. 索引列上有计算。+ - 等
  5. 索引列上使用了函数 sum cover
  6. 索引列是字符串的搜索的时候没有加’’ 比如 123 - ‘123’
  7. 在不可为空列中使用is null 和 is not null
  8. like 左边有%
  9. or两边的列不一致会导致索引实现 可以使用union
阅读全文 »

MySQL中的锁有很多种,各种锁应用在不同的地方。「MySQL依靠锁机制可以让多个事务更新一行数据的时候串行化」

MySQL中锁总的来说有两种概念:Lock和Latch

Latch

称为闩锁(轻量级的锁),因为Latch要求锁定的时间非常短。其目的是用来保证并发线程操作临界资源的正确性,并且通常没有死锁检测的机制。在InnoDB引擎中,Latch又分为mutex(互斥量)和rwlock(读写锁)。

mutex:互斥量;有时候有些资源需要共享和并发,但是又不是分频繁,所以向操作系统申请一个mutex,mutex都是排他的。

RW-LATCH : 读写锁

阅读全文 »

什么是Canal

canal译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
从这句话理解到了什么?
基于MySQL,并且通过MySQL日志进行的增量解析,这也就意味着对原有的业务代码完全是无侵入性的。

阅读全文 »