mysql innodb读书笔记

1、mysql数据库实例在系统上表现就是一个进程,被设计为一个单进程多线程架构。
   mysql的my.cnf中datadir,该参数指定了数据库所在路径
    mysql> show variables like 'datadir'
        -> ;
    +---------------+-----------------+
    | Variable_name | Value           |
    +---------------+-----------------+
    | datadir       | /var/lib/mysql/ |
    +---------------+-----------------+
    1 row in set (0.02 sec)

2、mysql由以下几个部分组成:存储引擎基于表,而不是基于数据库。
    #连接池组件
    #管理服务和工具组件
    #sql接口组件    
    #查询分析器组件
    #优化器组件    
    #缓冲组件
    #插件式存储引擎
    #物理文件

3、innodb存储引擎支持事务,其设计目标主要面向在线事务处理的应用,其特点是行锁设计、支持外键、并支持类似于oracle的非锁定读,即默认操作不产生锁。

4、连接mysql的方式:
    1):tcp/ip方式
    root@anLA7856:/home/anla7856# mysql -h127.0.0.1 -u root -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    2):命名管道与共享内存。
    3):unix域套接字:但是我这里连接失败
    mysql> show variables like 'socket'
        -> ;
    +---------------+-----------------------------+
    | Variable_name | Value                       |
    +---------------+-----------------------------+
    | socket        | /var/run/mysqld/mysqld.sock |
    +---------------+-----------------------------+
    1 row in set (0.01 sec)

    mysql> exit
    Bye
    root@anLA7856:/home/anla7856# mysql -u root -S /var/run/mysqld/mysqld.sock
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

5、mysql的后台线程:
    1):master thread
    2):io thread
    3):purge thread
    4):page cleaner thread

6、mysql是基于磁盘存储的,并将其中的记录按照页的方式进行管理,因此可视为磁盘数据库系统,这就需要缓冲池来处理与cpu速度的差别,
    mysql> show variables like 'innodb_buffer_pool_size'
        -> ;
    +-------------------------+-----------+
    | Variable_name           | Value     |
    +-------------------------+-----------+
    | innodb_buffer_pool_size | 134217728 |
    +-------------------------+-----------+
    1 row in set (0.01 sec)
   除此之外,如何来管理缓冲区呢?innodb是通过LRU算法来进行管理的。

7、数据库ACID:
    ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)

8、dba可以通过蛮查询日志来找出有问题的sql,对其进行优化。或者可以用过mysqldumpslow这个命令来进行查询。

9、当mysql实例启动时,会将自己的进程id写入一个pid文件,该文件由pid_file控制,默认位于数据库目录下,文件名为主机名.pid。
    mysql> show variables like 'pid_file';
    +---------------+----------------------------+
    | Variable_name | Value                      |
    +---------------+----------------------------+
    | pid_file      | /var/run/mysqld/mysqld.pid |
    +---------------+----------------------------+
    1 row in set (0.00 sec)
   mysql数据的存储是根据表进行的,每个表都会有与之对应的文件,每个表的表结构都会存入一个后缀名为.frm的文件

10、在innodb存储引擎表中,每个表都有主键,如果某一个表没有显示定义主键:这个时候会有一个_rowid的隐藏式主键列,如果是联合主键,就不能用_rowid查看了。
    1):有非空唯一索引,那么这一列就是主键
    2):如果没有非空唯一索引,那么innodb就会自动创建一个6字节大小的指针
    3):如果有多个唯一索引,就会自动选择第一个定义的非空唯一索引

11、在innodb存储引擎中,所有有数据都被逻辑地存放在一个空间里,成为表空间(tablespace),表空间又由端(segment),区(extend),页(page)组成,页有时候又
    称为块(block)。
   #默认情况下innodb存储引擎会有一个共享表空间ibdata1,所有数据都存在这里,如果用户启用了参数innodb_file_per_table,则没张表数据可以单独放到一个表空间里
    面,但是也只是数据、索引和插入缓冲的Bitmap页,而其他类的数据如回滚,系统事务信息等还是在共享表内。
   #在innodb中页的默认大小为16kb,而从innodb1.2开始,可以将页的大小设置为4k,8k,16k。
   #innodb存储引擎是面向列的,也就是说数据是按行进行存放的,每个页最多存放16kb/2 -200行的记录,即7992行。
   #compact行记录格式:设计目标就是高校的存储数据,简单来说,一个页中存放的行数据越多,其性能就越高。
   #在compact格式下,不管是char还是varchar类型,只要是null,就不占任何存储空间。
   #oracle的varchar2对大存放4000字节,sqlserver的最大存放8000字节,而mysql最大存放65535-3(其他开销)字节。

12、innodb存储引擎支持一下几种常见索引:
    #b+数索引
    #全文索引
    #hash索引
   #innodb存储引擎支持的hash索引是自适应的,innodb存储引擎会根据表的使用情况自动为表生成hash索引,不能呢个人为干预是否在一张表中生成hash索引。
   #b+树索引并不能找到一个给定键值的具体行,b+树索引能够找到数据行所在的页,然后数据库通过页读入内存,再在内存中进行查找,最后得到查找的数据。
   #b+树是为磁盘或者其他直接存取辅助设备设计的一种平衡查找树,所有记录节点都是按键值放在同一层的叶子节点上,所有节点都是按数虚存放的。
   #b+树索引在数据库中有一个特点就是高扇出性,因此在数据库中,b+树的高度一般都是在2~4层,因为一般机械磁盘每秒至少可以做100词io,2~4次io就是一次查询
      只需要0.02~0.04秒。
   #数据库中b+树索引可以分为聚集索引和辅助索引。
       #聚集索引:由于实际的数据页只能按照一颗b+树进行排序,因此每张表只能拥有一个聚集索引,多数情况下,查询优化器倾向于采用聚集索引,因为聚集索引
        能够在b+树上叶子节点直接找到数据
       #辅助索引:叶子节点并不包括行记录的全部数据,一个表可以有多个辅助索引。



火候不够,看得半懂不懂

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值