MySql概述及入门(三)
MySQL性能优化
主要优化安全和性能方面
安全方面 : 数据可持续性
性能方面 : 数据的高性能访问
性能优化——慢查询
在MySQL数据库中有一个慢查询日志功能,去获取所有查询时间比较长的SQL语句
查看是否开启慢查询
slow_query :是否开启慢查询日志,ON 为开启,OFF 为关闭,如果为关闭可以开启。
long_query_time :慢查询阈值,当查询时间多于设定的阈值时,记录日志,单位为秒。
临时开启慢查询
set global slow_query_log = ON;
set global long_query_time = 1;
永久开启慢查询
修改/etc/my.cnf配置文件,重启MySQL
性能优化——查看执行计划
MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT 语句进行分析, 并输出 SELECT 执行的详细信息, 以供开发人员针对性优化.
EXPLAIN SELECT * FROM USER;
可以查看该SQL语句有没有使用上了索引,有没有做全表扫描
l id: SELECT 查询的标识符. 每个 SELECT 都会自动分配一个唯一的标识符.
l select_type: SELECT 查询的类型.
l table: 查询的是哪个表
l partitions: 匹配的分区
l type: join 类型
l possible_keys: 此次查询中可能选用的索引
l key: 此次查询中确切使用到的索引.
l ref: 哪个字段或常数与 key 一起被使用
l rows: 显示此查询一共扫描了多少行. 这个是一个估计值.
l filtered: 表示此查询条件所过滤的数据的百分比
l extra: 额外的信息
性能分析语句 show profile
Query Profiler是MYSQL自带的一种query诊断分析工具,通过它可以分析出一条SQL语句的性能瓶颈在什么地方,默认没打开,需手动打开
show profile 和 show profiles 语句可以展示当前会话
l show profiles :以列表形式显示最近发送到服务器上执行的语句的资源使用情况.显示的记录数由变量:profiling_history_size 控制,默认15条
l show profile: 展示最近一条语句执行的详细资源占用信息,默认显示 Status和Duration两列 , 还可根据 show profiles 列表中的 Query_ID ,选择显示某条记录的性能分析信息
查看是否打开
* select @@profiling;
* show variables like ‘%profil%’;
开启profile功能
* set profiling=1; --1是开启、0是关闭
MySQL事务处理
事务概述
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。事务用来管理 insert,update,delete 语句。
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
一般来说,事务是必须满足4个条件(ACID):
l 原子性(Atomicity) : 构成事务的的所有操作必须是一个逻辑单元,要么全部执行,要么全部不执行。
l 稳定性(Consistency):数据库在事务执行前后状态都必须是稳定的。
l 隔离性(Isolation):事务之间不会相互影响 ,事务独立运行。
l 持续性(Durability):事务执行成功后必须全部写入磁盘 , 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。
MySQL事务支持
BEGIN或START TRANSACTION;显式地开启一个事务;
COMMIT;也可以使用COMMIT WORK,不过二者是等价的。COMMIT会提交事务,并使已对数据库进行的所有修改成为永久性的;
ROLLBACK;有可以使用ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。
查询当前自动提交功能状态: SELECT @@AUTOCOMMIT