数据库进阶
SQL语法执行过程:
客户端-->MySQL server-->存储引擎
索引定义:
索引是一种数据结构
索引包含一个表中列的值,并且这些值存储在一个数据结构中;
好处:提高数据检索效率;减少IO次数;降低CPU能耗;但不能有太多,5个内。
坏处:占用空间,降低更新表的速度,需要花时间研究建立最优秀的索引或者优化。
索引分类:
单列索引
普通索引
唯一索引:所有值唯一且可有null值;
主键索引:不允许null值;
组合索引
全文索引
适合索引的场景:
经常查询经常排序可进行创建索引
explain:
模拟优化器执行SQL查询语句
分析查询语句或是表结构的性能瓶颈
使用:
explain +SQL语句
作用:
事务:
是访问病可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行。
特点:
A 原子性:事务不可分割
C 一致性:事务开始和结束 数据完整性没有被破坏
I 隔离性:防止多个事务并发执行产生错误
D 持久性:对数据修改是永久的
事务操作:
begin 开始一个事务
rollback 事务回滚
commit 事务提交
统计日志:
slow log 慢查询日志 超出预支的long_query_time阀值的SQL记录
general log:全局查询日志,所有SQL查询的记录
查看慢查询日志(默认关闭):
用来记录响应时间超过阀值的SQL语句的日志,可以结合explain进行分析为什么查询慢
查看日志开关:show variables like '%query%'
打开日志开关: set global slow_query_log='ON'
设置阀值:set long_query_time=0.01
执行SQL语句
查看日志内容
在表中查看日志:
修改日志存放方式:set global log_output='table';
查看表中内容:select * from mysql.slow_log;
查看全局查询日志
查看变量信息:show variables like '%general%';
打开日志开关:set global general_log='ON'
执行SQL语句
查看表中日志内容:select * from mysql.general_log;