MySql概述及入门(二)
MySQL架构
逻辑架构图:
执行流程图:
MySQL的存储引擎
查询数据库支持的存储引擎
执行: show engines;
多存储引擎是mysql有别于其他数据库的一大特性,存储引擎是针对表的,MySQL 5.5之后,默认的存储引擎由MyISAM变为InnoDB。
InnoDB 引擎: 支持AUTO_INCREMENT(自增列),支持外键(FOREIGN KEY),创建的表的表结构存储在.frm文件中,优势在于提供了良好的事务处理、崩溃修复能力和并发控制。缺点是读写效率较差,占用的数据空间相对较大。
MyISAM 引擎: 曾经是MySQL的默认存储引擎,优势在于占用空间小,处理速度快。缺点是不支持事务的完整性和并发性。
MySQL日志文件
MySQL通过日志记录了数据库操作信息和错误信息。常用的日志文件包括错误日志、二进制日志、查询日志、慢查询日志和 InnoDB 引擎在线 Redo 日志等
日志刷新 : mysql> FLUSH LOGS;
shell> mysqladmin flush-logs
shell> mysqladmin refresh
错误日志 : 默认是开启的,而且从5.5.7版本以后无法关闭错误日志,它记录了MariaDB/MySQL服务启动和停止的信息,还记录了mysqld实例运行过程中发生的错误事件信息。
默认的错误日志名称:hostname.err , hostname表示当前的主机名
如果不知道错误日志的位置,可以通过 show variables like 'log_error'; 来查看。
错误日志所记录的信息是可以通过log-error和log-warnings来定义的,其中log-error是定义是否启用错误日志的功能和错误日志的存储位置,log-warnings是定义是否将警告信息也定义至错误日志中。
二进制日志 : 以事件形式记录的,不是事务日志(但可能是基于事务来记录二进制日志) 默认是关闭的,需要通过配置:log-bin=mysql-bin 进行开启。
其中mysql-bin是binlog日志文件的basename,binlog日志文件的名称:mysql-bin-000001.log
binlog记录了数据库所有的ddl语句和dml语句,但不包括select语句内容
binlog还包括了每个更新语句的执行时间信息,binlog主要作用是用于恢复数据,因此binlog对于s灾难恢复和备份恢复来说至关重要。
查询日志 : 默认情况下查询日志是关闭的。由于查询日志会记录用户的所有操作,其中还包含增删查改等信息,会影响mysql的性能
如若不是为了调试数据库的目的建议不要开启查询日志。
慢查询日志 : 默认关闭的,需要通过设置:slow_query_log=ON进行开启
记录执行时间超过long_query_time秒的所有查询,便于收集查询时间比较长的SQL语句
事务日志(redo log) : InnoDB特有的日志 , 也叫redo日志。
事务日志包括两部分:一是内存中的日志缓冲(redo log buffer),该部分日志是易失性的;二是磁盘上的重做日志文件(redo log file),该部分日志是持久的。
文件名为"ib_logfile0"和“ib_logfile1”,默认存放在表空间所在目录。 还有一个日志文件叫undo 日志,默认存储在ib_data目录下。
MySQL索引
为什么使用索引 : 1 .使用索引的主要目的是为了优化查询速度
2.索引可以帮助我们进行排序以避免以避免使用临时表
3.保证数据的准确性
什么是索引 : 通俗解释 索引就像是图书的目录,根据目录中的页码快速找到所需内容。
索引的类型:
单列索引:
普通索引:仅加速查询 最基本的索引,没有任何限制,允许在定义索引的列中插入重复值和空值 ,是我们大多数情况下使用到的索引。
唯一索引:索引列中的值必须是唯一的,但是允许为空值,
主键索引:是一种特殊的唯一索引,不允许有空值。
组合索引: 将几个列作为一条索引进行检索,使用组合索引时遵循最左前缀集合。
全文索引: 全文索引(FULLTEXT)仅可以适用于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_name on healerjean;
alter TABLE users drop index name_index ;
查看索引:
show index from healerjean;
索引的存储结构