1.1 原子性: 事务是最小的执行单位,不容许分割。事务的原子性确保动做要么所有完成,要么彻底不起做用;
1.2 一致性: 执行事务先后,数据库从一个一致性状态转换到另外一个一致性状态。
1.3 隔离性: 并发访问数据库时,一个用户的事物不被其余事务所干扰,各并发事务之间数据库是独立的;
1.4 持久性: 一个事务被提交以后。它对数据库中数据的改变是持久的,即便数据库 发生故障也不该该对其有任何影响。mysql
2.1 READ_UNCOMMITTED(未提交读): 最低的隔离级别,容许读取还没有提交的数据变动,可能会致使脏读、幻读或不可重复读
2.2 READ_COMMITTED(提交读): 容许读取并发事务已经提交的数据,能够阻止脏读,可是幻读或不可重复读仍有可能发生
2.3 REPEATABLE_READ(可重复读): 对同一字段的屡次读取结果都是一致的,除非数据是被自己事务本身所修改,能够阻止脏读和不可重复读,但幻读仍有可能发生。
2.4 SERIALIZABLE(串行): 最高的隔离级别,彻底服从ACID的隔离级别。全部的事务依次逐个执行,这样事务之间就彻底不可能产生干扰,也就是说,该级别能够防止脏读、不可重复读以及幻读。可是这将严重影响程序的性能。一般状况下也不会用到该级别。sql
Mysql 默认采用的 REPEATABLE_READ隔离级别
索引是一种帮助MySQL高效获取数据的数据结构
优点:数据库
劣势:数据结构
使用EXPLAIN关键字能够模拟优化器执行SQL查询语句, 从而知道MYSQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈
a、id并发
①id相同,执行顺序由上至下函数
②id不一样,id值越大优先级越高,越先被执行高并发
b、select_type性能
查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询
c、table优化
显示这行的数据是关于哪张表的。
d、type(最好到最差的顺序)spa
备注:通常来讲,得保证查询至少达到range级别,最好能达到ref
e、possible_keys
可能应用到这张表的索引
f、key
实际使用的索引
g、key_len
索引使用的字节数,在不损失精确性的状况下,长度越短越好
h、ref
显示索引的哪一列被使用了
i、rows
大体估算出找到所需记录所须要读取的行数
j、Extra
优化策略: 增大sort_buffer_size参数的设置、增大max_length_for_sort_data参数的设置
实质是先排序后进行分组,遵守索引键的最佳左前缀,当没法使用索引列时,增大sort_buffer_size+max_length_for_sort_data参数的设置
MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。 具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上的语句。 由他来查看哪些SQL超出了咱们的最大忍耐时间值,好比一条sql执行超过5秒钟,咱们就算慢SQL,但愿能收集超过5秒的sql,结合以前explain进行全面分析。
默认状况下,MySQL数据库没有开启慢查询日志,须要咱们手动来设置这个参数。(固然,若是不是调优须要的话,通常不建议启动该参数,由于开启慢查询日志会或多或少带来必定的性能影响。慢查询日志支持将日志记录写入文件。)
-- 查看开启状况 SHOW VARIABLES LIKE '%slow_query_log%'; -- 开启(只对当前数据库生效,若是要永久生效,就必须修改配置文件my.cnf) set global slow_query_log=1;
mysql提供能够用来分析当前会话中语句执行的资源消耗状况。能够用于SQL的调优的测量,相比explain,show profile展现的数据更加详尽。
-- 查看是否开启 show variables like 'profiling'; -- 开启功能,默认是关闭,使用前须要开启 set profiling=1; -- 查看结果 show profiles; -- 诊断SQL show profile cpu,block io for query n; -- 还能够经过SELECT * FROM information_schema.profiling WHERE query_id = n ORDER BY seq;获取