MySQL(二)

MySQL架构

   

 

 

 执行流程

 

 

 存储引擎介绍

MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。

  • 多存储引擎是mysql有别于其他数据库的一大特性;
  • 存储引擎是针对表的
  • MySQL 5.5之后,默认的存储引擎由MyISAM变为InnoDB

查看存储引擎:show engines;

MySQL物理结构

MySQL是通过文件系统对数据进行存储和管理的。

MySQL从物理结构上可以分为日志文件和数据文件。

日志文件

MySQL通过日志记录了数据库操作信息和错误信息。常用的日志文件包括错误日志、二进制日志、查询日志、慢查询日志和 InnoDB 引擎在线 Redo 日志、中继日志等。

查询日志(general query log):

默认情况下通用查询日志是关闭的。

由于通用查询日志会记录用户的所有操作,其中还包含增删查改等信息,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,会影响mysql的性能的。如若不是为了调试数据库的目的建议不要开启查询日志。

事务日志:

  • 它存储对数据库进行的所有更改,并全部记录插入、更新、删除、提交、回退和数据库模式变化。事务日志还称作前滚日志或重做日志。
  • 在缺省情况下,所有数据库都使用事务日志。事务日志的使用是可选的,但是,除非您因特殊原因而不使用,否则您应始终使用它。运行带有事务日志的数据库可提供更强的故障保护功能、更好的性能以及数据复制功能。

中继日志:

是在主从复制环境中产生的日志。

主要作用是为了从机可以从中继日志中获取到主机同步过来的SQL语句,然后执行到从机中。

数据文件

查看MySQL数据文件SHOW VARIABLES LIKE '%datadir%';

  • .frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息。
  • .ibd和.ibdata文件:用来存储InnoDB存储引擎表数据和索引信息。
  • .myd文件:主要用来存储使用MyISAM存储引擎的表数据信息
  • .myi文件:主要用来存储使用MyISAM存储引擎的表数据文件中任何索引的数据树

MySQL索引

介绍

使用索引的主要目的是为了优化查询速度

索引是一种特殊的文件或者叫数据结构(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。

索引的分类

单列索引

  1. 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。
  2. 唯一索引:索引列中的值必须是唯一的,但是允许为空值
  3. 主键索引:是一种特殊的唯一索引,不允许有空值

组合索引在表中的多个字段组合上创建的索引,只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。

组合索引(name,age,address)

正确可以使用组合索引的语句
 select * from 表名 where name = 'zhangsan' and age = 18 and address = '×××路'
 select * from 表名 where name = 'zhangsan' and age = 18
 select * from 表名 where name = 'zhangsan'

不能正确使用组合索引的语句
 select * from 表名 where name = 'lisi' and address = '×××路'
 select * from 表名 where age = 18 adn name = 'lisi'

全文索引全文索引,只有在MyISAM引擎上才能使用,只能在CHAR,VARCHAR,TEXT类型字段上使用全文索引。

索引的使用

创建索引

CREATE INDEX index_name ON table(column(length)) 
ALTER TABLE table_name ADD INDEX index_name ON (column(length))

CREATE UNIQUE INDEX index_name ON table(column(length)) 
CREATE FULLTEXTINDEX index_name ON table(column(length)) 

ALTER TABLE article ADD INDEX index_titme_time (title(50),time(10))

删除索引

DROP INDEX index_name ON table

非聚集索引

  • 叶子节点只会存储数据行的指针,简单来说数据和索引不在一起,就是非聚集索引。
  • 主键索引和辅助索引都会存储指针的值

聚集索引

  • 主键索引(聚集索引)的叶子节点会存储数据行,也就是说数据和索引是在一起,这就是聚集索引。
  • 辅助索引只会存储主键值
  • 如果没有没有主键,则使用唯一索引建立聚集索引;如果没有唯一索引,MySQL会按照一定规则创建聚集索引使用索引的注意事项

 

 

posted @ 2019-12-26 20:56  丿小杰  阅读(135)  评论(0编辑  收藏  举报